首页 新闻 搜索 专区 学院

同一个Socket实例第二次无法接收服务端数据!!

0
悬赏园豆:100 [已关闭问题]

服务端:创建了两个线程来处理客户端请求,一个线程用于接收连接进来的Socket,并将Socket添加到一个队列Queue对象中;另外一个线程用于将Queue中的Socket提出来进行接收、发送操作,接收、发送操作采用异步方式。

客户端:用连接到服务端的Socket创建一个NetworkStream的实例(NetworkStream stream = new NetworkStream(socket, true);),并将该NetworkStream的实例,包装到一个System.IO.BufferedStream的实例中(/*用于接收*/Stream inStream = new BufferedStream(stream); /*用于发送*/Stream outStream = new BufferedStream(stream);)进行与服务端的数据收发。

然后我创建了一个连接池,初始化创建了10个服务端的连接,然后写了一个单线程的测试程序,从连接池中将这10个连接依次取出来发送、接收数据,一切OK(将连接都还回了连接池),但当我再次从连接池取出一个连接(已用完10个创建的连接,这次是第二次取出的连接,在前面是已经使用过的)进行发送、接收数据时,测试程序无法接收到服务端的返回的数据。(不管在客户端还是服务端,在发送/接收完数据后,我都没有关闭连接

从服务端的日志看,服务端是接收到了客户端发来的数据的,并且服务端也成功将数据发送出去了,只是客户端没有接收到。

此问题困扰在下两天了,望达人指教~

阿蒙的主页 阿蒙 | 初学一级 | 园豆:100
提问于:2008-12-24 11:32
< >
分享
其他回答(1)
0

SOCKET线程创建机制,先是有一个监听,连接上以后,会开一个新连接,也就是新的SOCKET对象,这个新对象负责数据的传输。也就是说这个新连接是自动创建的,没办法从已有的连接中取得。

Birdshover | 园豆:352 (菜鸟二级) | 2008-12-24 13:09
0

你的信息量太少,无法判断你的问题。socket 做收发是肯定没有问题的。肯定是你程序的问题。可能需要更多的代码来判断你的问题所在。

eaglet | 园豆:17119 (专家六级) | 2008-12-25 05:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册