2011-03-26 73 views
0

我试图编写一个实验性的服务器程序,它接受连接并向客户端发送消息。我得到了客户端连接,但我似乎无法发送消息,却没有做出奇怪的事情。Winsock的send()奇怪地工作

例如,在此剪断,conn是连接插座:

int sendRes; 
char buf[1024]; 
strcpy_s(buf,"Testing!"); 
sendRes = send(conn,buf,strlen(buf),0);
好吧,当我通过Telnet连接到它,它不显示任何内容,只是退出。但是,当我将 cout << sendRes行添加到此剪辑的末尾时,它突然生效并显示 测试! Telnet上的,就像它应该的一样。

因此,我想问任何知道的人,为什么这样做?

+1

我假设你在你的应用程序中调用shutdown和closesocket?在调用关机之前可能不会发送一些数据。还要检查WireShark或Netmon的线路。 – 2011-03-26 07:56:54

回答

1

难道是telnet客户端本身正在等待行尾标记显示传入的缓冲区吗?

尝试编写自己的客户端并使用recv来查看是否有任何内容传入。

然后再次,新行可能没有任何关系,因为cout是在本地。

尝试检查RFC854完整的telnet规范(或者,再次,只需编写自己的客户端)。

+0

我想说的是一样的,但我不确定这是不是罪魁祸首。为什么“cout”会有所作为?它需要刷新网络数据流的时间了吗?关于插座如何/何时打开/关闭的更多内容在这里会有所帮助。 – Will 2011-03-26 07:55:42