데이터 스트림을 읽거나 쓰려면 이진 직렬화 개체를 사용하고 이전에 쓰기/읽기를 수행하려면 "인스턴스 클래스"을 DLL 파일로 컴파일해야합니다. 그들 사이에 같은 어셈블리가 맞습니까? "C#, 소켓 통신을 통한 이진 직렬화
private void doRead()
{
do
{
if (mClient.GetStream().CanRead)
{
System.Net.Sockets.NetworkStream strm = mClient.GetStream();
IFormatter formatter = new BinaryFormatter();
object mydat = (object)formatter.Deserialize(strm);//deserialize data receiver
}
} while (true);
}
그리고 이것은 내 입니다 :이 내 바이너리 발신자 번호
public void SendBinarySerial(object graph)
{
IFormatter formatter = new BinaryFormatter();
System.Net.Sockets.NetworkStream strm = mClient.GetStream(); //get TCPclient stream
formatter.Serialize(strm, graph);
}
이며, 여기 내 바이너리 수신기 코드
:
잘 지금, 여기 내 문제입니다 인스턴스 클래스 " 코드를 전체 클라이언트에 보내고 싶습니다. 확인의 다음 코드를 살펴 보자 : 당신이 볼 수 있듯이
[Serializable()]
public class DataSend
{
public List<Bitmap> MainData = new List<Bitmap>();
public List<string> Title = new List<string>();
}
이 같은 비트 맵 및 캐릭터 등 여러 가지 목록 변수가 있습니다. 비트 맵 데이터는 이미지 데이터 용입니다. 만약 내가 많은 이미지를 채우면 가변 메모리의 크기가 커질 것입니다. 어쩌면 약 20MB입니다.
그 후 나는 그들을 전체 고객에게 보냈습니다. 음, 내 질문은 여기에있다 :
이 기술을 사용하면 크기 객체가 약 20MB 인 경우이 기능이 잘 작동합니까? 소켓 통신에 데이터 전송에 대한 크기 제한이 있다는 것을 알고 있습니다.
나는 프로토콜을 전혀 정의하고 싶지 않습니다. 소켓 통신을 사용하고 싶습니다.하지만 이것은 최선의 방법은 아닙니다.
답장을 보내 주셔서 감사합니다.
'CanRead' 검사를하지 마십시오. 아무 것도하지 않고 거짓이면 CPU의 100 % 굽기로 연결됩니다. 코드가 좋게 보입니다. – usr