C#Socket实现P2P聊天

问题描述

侦听线程在构造函数中启动this.IPP2P=newIPEndPoint(Dns.Resolve(System.Net.Dns.GetHostName()).AddressList[0],ClientPort);this.listenthread=newThread(Listen);this.listenthread.Start();然后listen函数是:privatevoidListen(){try{socket_listen.Bind(IPP2P);}catch(Exception){MessageBox.Show("监听失败");return;}while(true){socket_listen.Listen(10);socket_accept[num_con]=socket_listen.Accept();IPP2P_other[num_con]=(IPEndPoint)socket_accept[num_con].RemoteEndPoint;acceptthread[num_con]=newThread(Recieve);acceptthread[num_con].Start(num_con);}}考虑要同时进行多个P2P聊天,因此每侦听到一次请求都会新建一个接收线程并且进入Recieve函数接收数据,但是程序运行过程中我发现当某两个人聊天结束后再次发起聊天(即一端第二次被发起请求),就会出现无法侦听到的情况,这是什么原因呢?是关闭聊天窗口是没有将原来的连接析构干净吗?还是有其他原因?多谢各位大大啦~~

解决方案

解决方案二:
建议检查下侦听哪里,当客户端下线后是否移除了,如果是等待是否跟重连对应上了,跟客户端应该没啥问题,关键调试服务端侦听,和处理部分。
解决方案三:
代码异常简陋不要乱用数组,你这样用,数组早晚有溢出的时候你可以使用异步侦听,或者线程池
解决方案四:
楼主去搜索无阻塞通讯通讯吧,就学习微软的标准文档,然后再来写这个程序。长连接的应用在公网上很难活下来了,在学习无阻塞过后,要把系统设计为短连接应用。

时间: 2024-07-29 06:15:12

C#Socket实现P2P聊天的相关文章

Java基于socket实现简易聊天室实例

  本文实例讲述了Java基于socket实现简易聊天室的方法.分享给大家供大家参考.具体实现方法如下: chatroomdemo.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package com.socket.demo; import java.io.IOException; import java.net.DatagramSocket; public class ChatRoomDemo { /** * @param args * @thro

mysql-如何利用C#和socket做出一个聊天室

问题描述 如何利用C#和socket做出一个聊天室 1.进一步熟悉和掌握TCP/IP协议的原理.2.初步了解网络环境下的程序设计步骤与过程.3.初步掌握Winsock提供的函数的功能与使用方法.4.理解网络的Socket通信.5.利用Winsock编写基于TCP或UDP协议的C/S模式网络通信软件--一个类似QQ的网络聊天工具. 这是我们期末大作业的要求,需要用到的只是大概有C# ,socker , MYSQL ,不知道有什么办法做成这个,或者有大神可以推荐下C#和MYSQL的自学视频之类的么,

用socket编写一个聊天软件,使用udp协议

问题描述 用socket编写一个聊天软件,使用udp协议 用socket编写一个聊天软件,使用udp协议,在visual studio 2010开发环境下怎么实现呢? 解决方案 参考:http://blog.csdn.net/andrew_wx/article/details/6671137 解决方案二: 利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版) 解决方案三: http://www.pudn.com/downloads529/sourcecode/windows/net

Java基于socket实现简易聊天室实例_java

本文实例讲述了Java基于socket实现简易聊天室的方法.分享给大家供大家参考.具体实现方法如下: chatroomdemo.java package com.socket.demo; import java.io.IOException; import java.net.DatagramSocket; public class ChatRoomDemo { /** * @param args * @throws IOException */ public static void main(S

socket多人聊天程序C语言版(二)_C 语言

socket多人聊天程序C语言版(一)地址: http://www.jb51.net/article/94938.htm 1V1实现了,1V多也就容易了.不过相对于1V1的程序,我经过大改,采用链表来动态管理.这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了.用C语言写这个还是挺费时间的,因为什么功能函数都要自己写,不像C++有STL库可以用,MFC写就更简单了,接下来我还会更新MFC版本的多人聊天程序.好了,废话少说,进入主题. 这个程序要解决的问题如下: 1.CPU使

android Socket实现简单聊天小程序

android Socket实现简单聊天小程序,供大家参考,具体内容如下 服务器端: package org.hwq.echo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public cla

php socket实现的聊天室代码分享_php技巧

/** * patServer * PHP socket server base class * Events that can be handled: * * onStart * * onConnect * * onConnectionRefused * * onClose * * onShutdown * * onReceiveData * * @version 1.1 * @author Stephan Schmidt <schst@php-tools.de> * @package pa

socket多人聊天程序C语言版(一)_C 语言

首先,不要一步登天直接解决多人聊天这个问题,先把问题化简. 1.多人聊天的核心问题是服务器如何标识不同的客户端,如何根据客户端的需求转发消息给指定客户端. 2.多人聊天转化为C-C聊天,但是不再是直接C-C,而是通过server转发消息,所以变成==>C-S-C. 3.server如何允许2个client同时连接,设置listen函数的第二个参数,最大连接数. 4.server如何标识两个client,用一个结构体数组来存放两个client的信息. 5.server如何转发消息给client,很

Java中利用Socket实现客户端聊天程序

Socket是网络编程中最基本的通信接口,常用的网络辅助类,比如URL等之类,其底层还是基于Socket来实现的. 而Socket,形象来说,就是连接通信的两端,比如这样 S<==>S,中间的通道就是网络了,而简单地利用Socket,我们就可以来实现一个简单的聊天功能 具体效果看下图: 这只是在本地中试用的效果,如果加上UI界面,其实就可以做成一个聊天的小应用了. 1. Server 端主要是利用ServerSocket的accept方法来等待客户端的连接,如果客户一直没有连接,则会在这里等待