C# socket 客户端发送成功,服务端没有接收到也没报错

doudingchenlei 2018-01-15 02:08:16
private static bool SendString(string strMessage, ref string rsp)
{
bool result = false;
Socket c = null;
int sendBytes = 0;
try
{
string host = _desthost;
int port = _destport;
IPAddress ip = IPAddress.Parse(host);

IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
c.ReceiveTimeout = 30000;
c.Connect(ipe);//连接到服务器

byte[] bs = Encoding.Default.GetBytes(strMessage);
sendBytes = c.Send(bs, bs.Length, 0);//发送信息
WriteLog("SEND=" + strMessage);

byte[] recvBytes = new byte[1024];
c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
rsp = Encoding.Default.GetString(recvBytes, 0, recvBytes.Length).TrimEnd('\0');

WriteLog("RECV=" + rsp);

c.Close();
result = true;
}
catch (Exception ex)
{
rsp = ex.Message;

result = false;
WriteSysLog(ex.Message + "\r\n[data=" + strMessage + "]");
}
finally
{
if(c != null)
c.Close();
}
return result;
}


以上是客户端代码。服务端是另一个公司开发的,我无法获得。
四台机器,每台机器上都装了一个客户端和一个服务端,通讯IP设的是127.0.0.1,端口是约定好的。每天早上开开进行通讯,晚上九点结束,关闭客户端和服务端,关机。每隔两三天左右会出现一次,四台机器同时出现通讯失败,客户端这边能看到发送成功的日志,过了30秒之后抛出了异常 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 服务端那边没收到消息,也没有抛异常。Telnet相应端口,黑框框正常弹出。重启客户端,仍然是send成功,receive抛异常,再重启服务端后,恢复正常通讯。整个异常期间服务端没有抛错,也没有接收到数据。

有没有遇到过的,求赐教。
...全文
1743 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
doudingchenlei 2018-01-26
  • 打赏
  • 举报
回复
目前还是没解决,但应该不是我客户端的问题。先结贴,server端改好解决问题的话,再来说明。
  • 打赏
  • 举报
回复
开发、编程是最低级的事情,编程的目的不是为了发布给用户用,编程开发的目的是为了通过测试。而通讯测试最基本地,就是频繁地插拔网线,看看程序是不是很糟糕地死掉。 没有测试驱动理念,就没有软件质量保证,这样的服务器软件纯粹是豆腐渣。
  • 打赏
  • 举报
回复
引用 2 楼 doudingchenlei 的回复:
[quote=引用 1 楼 xuzuning 的回复:] 127.0.0.1 是本机内环 ip 地址,自己与自己通讯意义何在? 四台机器同时出现通讯失败,可能是程序有问题(木马)
我这边写的是客户端,服务端是另一个公司的,我向他们请求数据,他们给我返回我需要的数据。 每台机器都有一个客户端和一个服务端,四台同时发生,确实是让我很费解。。。[/quote] 明显是服务器端有故障,不要纠结客户端。
doudingchenlei 2018-01-24
  • 打赏
  • 举报
回复
引用 9 楼 fontain2 的回复:
可以尝试换成本机IP试试看,127.0.0.1这样确实有些问题
换成本机IP了,昨天晚上又出现了,真的不知道为啥么了。。。
xian_wwq 2018-01-24
  • 打赏
  • 举报
回复
问题看似奇怪,但是要定位也不难 使用抓包工具, 如果客户端发送的数据不对,那就找客户端的问题; 如果发送数据正常,让server开发人员改bug吧
doudingchenlei 2018-01-24
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
开发、编程是最低级的事情,编程的目的不是为了发布给用户用,编程开发的目的是为了通过测试。而通讯测试最基本地,就是频繁地插拔网线,看看程序是不是很糟糕地死掉。 没有测试驱动理念,就没有软件质量保证,这样的服务器软件纯粹是豆腐渣。
但是,服务端和客户端是一对一的,就是想不通为何每次都是同时发生。服务端开发人员基于这个现象怀疑是中病毒,可是杀毒之后并不能恢复通讯
doudingchenlei 2018-01-22
  • 打赏
  • 举报
回复
引用 9 楼 fontain2 的回复:
可以尝试换成本机IP试试看,127.0.0.1这样确实有些问题
改了试试,再观察
doudingchenlei 2018-01-22
  • 打赏
  • 举报
回复
引用 10 楼 wawd74520 的回复:
SendString是否在线程中使用? 超时是30秒。那么是否30秒内没发消息服务端会断开连接? 你这个方法调用多次会不会导致监听同一端口问题?端口释放问题。
sendString不在线程中使用,30秒是接收超时时间。和是否发送消息应该没关系吧。我用的是短连接。
失落的神庙 2018-01-17
  • 打赏
  • 举报
回复
SendString是否在线程中使用? 超时是30秒。那么是否30秒内没发消息服务端会断开连接? 你这个方法调用多次会不会导致监听同一端口问题?端口释放问题。
fontain2 2018-01-17
  • 打赏
  • 举报
回复
可以尝试换成本机IP试试看,127.0.0.1这样确实有些问题
doudingchenlei 2018-01-16
  • 打赏
  • 举报
回复
引用 7 楼 fontain2 的回复:
通讯IP设127.0.0.1,解释一下,这个地址是保留IP,好像这里就有问题
因为服务端和客户端都在同一台机器上,所以设置成127.0.0.1了,这样有问题吗?
fontain2 2018-01-16
  • 打赏
  • 举报
回复
通讯IP设127.0.0.1,解释一下,这个地址是保留IP,好像这里就有问题
doudingchenlei 2018-01-16
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
别扯!从他的代码上看,根本就没有协议! 因为你不可能有使用证自己组装协议字:传入的 strMessage 直接 byte[] bs = Encoding.Default.GetBytes(strMessage); sendBytes = c.Send(bs, bs.Length, 0);//发送信息 就发出去了 接收也是直接就反悔了 c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息 rsp = Encoding.Default.GetString(recvBytes, 0, recvBytes.Length).TrimEnd('\0');
是的,发送和接收的内容都是我们约定好的。我发送固定格式的strMessage 给他,他给我返回固定格式的rsp 。应该不是格式的问题,因为每次发送接收都是按照这个格式,但是只有偶尔才会出现这种问题。发生问题的时候发送内容也正常。只是单纯的服务端接收不到数据。。。
xuzuning 2018-01-15
  • 打赏
  • 举报
回复
别扯!从他的代码上看,根本就没有协议! 因为你不可能有使用证自己组装协议字:传入的 strMessage 直接 byte[] bs = Encoding.Default.GetBytes(strMessage); sendBytes = c.Send(bs, bs.Length, 0);//发送信息 就发出去了 接收也是直接就反悔了 c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息 rsp = Encoding.Default.GetString(recvBytes, 0, recvBytes.Length).TrimEnd('\0');
  • 打赏
  • 举报
回复
好好看看协议,多半是发过去的数据,那边解析的不会,所以就没回你
孤独de猫 2018-01-15
  • 打赏
  • 举报
回复
2个程序之间的通信协议 是怎么定义的?向写服务器的公司要通讯协议 。
doudingchenlei 2018-01-15
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
127.0.0.1 是本机内环 ip 地址,自己与自己通讯意义何在? 四台机器同时出现通讯失败,可能是程序有问题(木马)
我这边写的是客户端,服务端是另一个公司的,我向他们请求数据,他们给我返回我需要的数据。 每台机器都有一个客户端和一个服务端,四台同时发生,确实是让我很费解。。。
xuzuning 2018-01-15
  • 打赏
  • 举报
回复
127.0.0.1 是本机内环 ip 地址,自己与自己通讯意义何在? 四台机器同时出现通讯失败,可能是程序有问题(木马)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧