Socket简单问题

kkun_3yue3 2007-12-04 05:16:12
            ipe = new IPEndPoint(clientIp, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipe);
socket.Listen(10);
temp = socket.Accept();


侦听代码

byte[] msg = Encoding.ASCII.GetBytes(message);
temp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
temp.Connect(IPAddress.Parse("10.0.0.48"), 8000);
if (temp.Connected) {
temp.Send(msg, msg.Length, 0);
}
else {
temp.Connect(IPAddress.Parse("10.0.0.48"), 8000);
}

客户端连接代码


为什么只能通讯一次?以后再点发送都没有任何反应,过一会儿提示主机强迫关闭一个现有连接?给我感觉是连接的时间很断一样,仿佛我正在打字它就已经关闭掉了!
我的本意是,实现P2P通讯,每次运行都即当服务器又当客户端,不知道这样的思路行不行得通,
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccjjxx001 2007-12-04
  • 打赏
  • 举报
回复
一般实现点对点传输都是用UDP,你的那段代码适用于TCP的,TCP一般的步骤如下:
服务器端:
1 建立TCP套接字
2 绑定本地IP地址和端口
3 开始监听
4 收到客户端请求后,建立连接套接字
5 在连接套接字上发送和接受数据
客户端:
1 建立TCP套接字
2 向服务器请求连接
3 得到服务器响应,连接成功
4 发送数据

UDP要简单一些:
服务器端
1 建立UDP套接字(需要给定端口)
2 接收数据(在阻塞模式,线程一般租塞在接收方法,接收到数据后返回)
客户端
1 建立UDP套接字
2 向服务器IP和端口发送数据
ccjjxx001 2007-12-04
  • 打赏
  • 举报
回复
按照LZ的要求,应该使用UDP,不要采用TCP,UDP不需要保持连接状态,只是在需要时向目标端口发送数据就可以了.
VirtualDesktop 2007-12-04
  • 打赏
  • 举报
回复
建议lz先上网看看阻塞式socket的工作方式
理解了那个流程程序就好写多了
kkun_3yue3 2007-12-04
  • 打赏
  • 举报
回复
楼上的朋友,能帮忙说一下大概流程不,什么时候开新线程循环监听,什么时候发送数据
symbol441 2007-12-04
  • 打赏
  • 举报
回复
试试

while(true)
{
temp = socket.Accept();
}
symbol441 2007-12-04
  • 打赏
  • 举报
回复
实现P2P通讯,每次运行都即当服务器又当客户端,不知道这样的思路行不行得通
----
可以实现的.

貌似LZ的服务器端没有循环监听连接吧

110,544

社区成员

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

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

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