csocket如何完全发送接收数据

2021-03-08 19:23:35 字数 3198 阅读 4577

1楼:大野瘦子

发送:private void button2_click(object sender, eventargs e)

catch}}

接收:system.timers.timer atimer = new system.timers.timer();

byte res = new byte[1024];

private void form1_load(object sender, eventargs e)

void timermange()

private void socket_rev(object sender, eventargs e)}

2楼:匿名用户

比如b1:1-100是一个“数据包”,b2:0是一个“数据包”,每次发送以“数据包”为单位发送,“数据包”中包含“开始”和“结束”的标记,那么 发送端 b1,b2的执行可以想象成 数据包b1:

b1开始+1~100+b1结束,数据包b2:b2开始+0+b2结束,接受端 接受到数据包b1的"b1开始"标记时,创建b1线程,b1线程接受到1~10时,接受端 接受到数据包b2的"b2开始"标记,创建b2线程,b2线程接受0,b2线程接受"b2结束"标记,释放b2线程,同时b1线程接受到11~100和"b1结束"标记释放b1线程。

文字描述的不是很给力,**例子看看,希望能让你明白。

3楼:匿名用户

存在情况:

1、 接收端循环没写好

2、没有读完网络流(缓存可以设大些,或判断是否读到完所有的字节)建议要一次发完所有数据 可以先将100个数字拼接成字符串,然后发送一次 。字符串头可加入[length=***]其中***是实际发送的字符串长度(注意不是字节数组buffer的长度),那么对于上面的请求,则我们发送的数据为:“[length=9]1,2,23,54”。

而服务端接收字符串之后,首先读取这个“元数据”的内容,然后再根据“元数据”内容来读取实际的数据。取得内空后就可以拆分成数字

4楼:匿名用户

服务器端:

namespacesockettest

",socket.remoteendpoint);

socket.send(encoding.ascii.getbytes("wel***etoserver"));

//threadthread=newthread(receivemessage);

//thread.start();

}publicstaticvoidreceivemessage(objectobj)

from",datastring,socket.remoteendpoint);

//threadthread=newthread(sendmessage);

//thread.start(socket);

}staticsocketserversocket;

staticvoidmain(stringargs)

atport",ipendclient.address,ipendclient.port);

//定义待发送字符

stringwel***e="wel***etomyserver";

//数据类型转换

data=encoding.ascii.getbytes(wel***e);

while(true)

catch(exception)

}client.close();

}//console.writeline("disconnectform",ipendclient.address);

serversocket.close();}}

}客户端:

namespaceclient

publicstaticvoidreceivemessage(objectobj)

from",datastring,socket.remoteendpoint);

//threadthread=newthread(newparameterizedthreadstart(sendmessage));

//thread.start(socket);

}staticvoidmain(stringargs)

//异常处理

catch(socketexceptione)

//定义接收数据的长度

intrecv=socket.receive(data);

//将接收的数据转换成字符串

stringdata=encoding.ascii.getstring(data,0,recv);

//控制台输出接收到的数据

console.writeline(stringdata);

while(true)

//将从键盘获取的字符串转换成整型数据并存储在数组中

data=encoding.ascii.getbytes(input);

//发送该数组

socket.send(data,data.length,socketflags.none);

////如果字符串是"exit",退出while循环

//if(input=="exit")

//////对data清零

//data=newbyte[1024];

////定义接收到的数据的长度

//recv=socket.receive(data);

////将接收到的数据转换为字符串

//stringdata=encoding.ascii.getstring(data,0,recv);

////控制台输出字符串

//console.write(stringdata);

////发送收到的数据

//socket.send(data,recv,0);

}console.writeline("disconnectfromserver");

socket.shutdown(socketshutdown.both);

socket.close();}}}

5楼:天涯

你在发送端 设置一个标志,说明我发送的东西已经发送完毕,你接受的时候,判断接受的网络流中是否有这个标志,如果有,代表已经接收完整了。否则没有。

打字不易,如满意,望采纳。

C串口连续发送接收数据蓝屏问题,C# 串口连续发送接收数据蓝屏问题 20

1楼 匿名用户 看看蓝屏时提示的错误原因,多收集几次蓝屏的错误原因及出错地址,看看有没有规律性。 里加上打印debug信息,看看最后是在哪个函数里导致的蓝屏,debug信息可以包括 循环次数 局部数组的大小 字符串的长度 等等。 c 中,两个窗体同时不断的调用同一个串口,不断重 送命令,接收数据的操...

vb接收zigbee发出的数据,vb接收zigbee发出的数据的协议

1楼 兄弟连教育北京总校 清晰了解下位机的通信协议和数据帧约定,编写vb的ms m控件 。 提供个vb6 0编写的通信工程参考。 vb接收zigbee发出的数据的协议 2楼 匿名用户 需要知道协议 端口 就可以做出来,接收到zigbee发送的数据 android ble 接收数据 3楼 阳光语言矫正...

can总线发送数据的问题,can总线中,总结点发送数据,在什么情况下才能把数据发出去,如果发送的数据没人接受,又会发生什么呢??

1楼 胜利之 如果can发送节点处于 正常发送 模式 发送数据但是没有任何节点接收那么一定会发送失败。 一次发送失败不会产生错误中断,只是发送错误计数器值增加,can控制器重发还发不出去,发送错误计数器累加达到一定的值后才会产生相应的中断。 检测是否发送成功要么是通过发送中断或者发送状态位来的,不是...