日期:2014-05-18  浏览次数:21180 次

socket连接,客户端断开连接,程序直接退出
又是我,今天又遇到两个问题,
用socket做的服务器端和客户端的通讯,
服务器端启动监听,客户端启动连接,
客户端连接到服务器端之后开始传输数据。
一个问题是,
客户端循环给服务器端发送字符串,
服务器端循环接收字符串,
服务器端接收到得和客户端发送的信息格式不一致,
比如(一行是发送或者接收一次):
客户端发送: 
aaaaaaaaaaa
bbbbbbbbbbbbb
cccccccccccc
服务器端接收:
aaaaaaaaaaabbb
bbbbbbbbbcccccc
cccccccccccccc
大概就是这样。为什么会这样呢?
要是想让他发送和接收是一样的顺序,
该怎么办呢?
另外,
连接建立以后,
客户端断开连接
使用的是 this.sock.Close();
然后直接服务器端和客户端程序都自动关闭了,
网上说,牵扯到SIGPIPE信号,需要捕捉错误,
就在服务器端和客户端加了 try catch,其实客户端牵扯到得代码基本都有try和catch
然后客户端再断开连接的时候,
服务器端没有终止,是捕捉到了错误,但是客户端依旧直接终止。
这个情况改造怎么处理呢??
请过往的大神们给点指点啊

------解决方案--------------------
客户端循环给服务器端发送字符串,
服务器端循环接收字符串,
服务器端接收到得和客户端发送的信息格式不一致,
比如(一行是发送或者接收一次):


自己定一份数据协议,发送前封装,接收后拆包提取。


------解决方案--------------------


这个问题是因为粘包了
你在发送的时候顺便发送一个标识符。保证不会再数据库中出现必须。
在接收的时候拆分掉就行了,while循环队列接收,所以这样错出来的效果是数据不会丢,也能解析。
------解决方案--------------------
客户端的Socket NoDelay 属性设置为true试下。
------解决方案--------------------
http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html

看看这篇文章,应该有所启发