100分,新手求教Socket编程的问题,希望能回答详细点,最好有例子

songjinxi123 2009-06-20 11:43:40
我是照着MSDN上的实例来学习Socket编程的,其中有一点很疑惑。
在MSDN的示例代码中,在每完成一次通信之后,他都会把连接关闭掉
Socket handler = (Socket)ar.AsyncState;
int bytesSent = handler.EndSend(ar);
handler.Shutdown(SocketShutdown.Both);
handler.Close();

我的问题:
1.这是不是必须做的?
2.我能不能不关闭Socket?让下次通信直接使用这个Socket,因为在我想象中重新建立一个连接会比使用已有的连接要慢些。
3.如果可以不关闭Socket,那么我因为怎么获取第二次的接收数据?是在接收方法那里写一个while循环吗?
4.如果必须关闭Socket,那么我用什么方法实现保持连接的功能?因为我眼中的那些网络游戏都只在登录的时候创建了一次新连接,之后一直用那个连接通信,就算你中途停顿一段时间也没关系。
...全文
51 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
songjinxi123 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 songhtao 的回复:]
1.这是不是必须做的?
是必须的,通信完毕就应该关掉,当然如果需要继续通信,可以一直保持连接。

2.我能不能不关闭Socket?让下次通信直接使用这个Socket,因为在我想象中重新建立一个连接会比使用已有的连接要慢些。
能,可以在通信完毕才关掉

3.如果可以不关闭Socket,那么我因为怎么获取第二次的接收数据?是在接收方法那里写一个while循环吗?
可以用while接受。
Console.WriteLine("Waiting for a connect…
[/Quote]

这样写的话,单核CPU就直接1001%了,有更好的方法吗?
songjinxi123 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 enaking 的回复:]
2、可以的
3,你可以采取异步,,不用循环,
回家给你一个实例吧,,以前有写个异步的,
[/Quote]
有实例就最好了。我只想到用循环,但是太占用CPU资源了。
我不懂电脑 2009-06-20
  • 打赏
  • 举报
回复
1.这是不是必须做的?
是必须的,通信完毕就应该关掉,当然如果需要继续通信,可以一直保持连接。

2.我能不能不关闭Socket?让下次通信直接使用这个Socket,因为在我想象中重新建立一个连接会比使用已有的连接要慢些。
能,可以在通信完毕才关掉

3.如果可以不关闭Socket,那么我因为怎么获取第二次的接收数据?是在接收方法那里写一个while循环吗?
可以用while接受。
Console.WriteLine("Waiting for a connection...");
Socket handler = listener.Accept();
String data = null;

while (true) {
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes,0,bytesRec);
if (data.IndexOf("<EOF>") > -1) {
break;
}
}

Console.WriteLine( "Text received : {0}", data);

byte[] msg = Encoding.ASCII.GetBytes(data);
handler.Send(msg);
handler.Shutdown(SocketShutdown.Both);
handler.Close();


4.如果必须关闭Socket,那么我用什么方法实现保持连接的功能?因为我眼中的那些网络游戏都只在登录的时候创建了一次新连接,之后一直用那个连接通信,就算你中途停顿一段时间也没关系。
只能重连。
zenowolf 2009-06-20
  • 打赏
  • 举报
回复
楼上顺便也给我一个吧。。谢谢,raineo_pzheng@163.com
zenowolf 2009-06-20
  • 打赏
  • 举报
回复
开一个线程while(true){Socket.Receive();}
enaking 2009-06-20
  • 打赏
  • 举报
回复
2、可以的
3,你可以采取异步,,不用循环,
回家给你一个实例吧,,以前有写个异步的,

110,537

社区成员

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

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

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