永发信息网

你好,请问网络编程聊天室程序运行后出错,服务器端显示 accept:invalid argument.这个问题你解决了吗?

答案:2  悬赏:40  手机版
解决时间 2021-03-20 09:00
课程设计,希望你可以帮我一下
最佳答案
参数不正确
全部回答
这样的写法有点问题:1)服务器端既然采用了异步方式Accept,就没有必要再启线程2)估计allDone是一个ManualResetEvent。用ManualResetEvent的目的什么呢?服务器端采用异步Accept的代码其实很简单,也不需要ManualResetEvent同步 public class AppTCPServer { public AppTCPServer(string localIP, int port) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); EndPoint localEP = new IPEndPoint(IPAddress.Parse(localIP), port); socket.Bind(localEP); socket.Listen(100); socket.BeginAccept(AcceptAsync, socket); } private void AcceptAsync(IAsyncResult ar) { Socket socket = ar.AsyncState as Socket; try { Socket client = socket.EndAccept(ar); Console.WriteLine("客户端连接成功!客户端:{0}", client.RemoteEndPoint.ToString()); if (OnConnected != null) { OnConnected(this, new ClientConnectedEventArgs(client)); } } catch (Exception e) { Console.WriteLine("AcceptAsync发生异常,异常信息:\n{0}", e.Message); } finally { //继续异步Accept socket.BeginAccept(AcceptAsync, socket); } } //客户端连接后的事件 OnConnect public event EventHandler OnConnected; } /// /// 事件参数:接收客户端连接后的事件参数 /// public class ClientConnectedEventArgs : EventArgs { public ClientConnectedEventArgs(Socket clientSocket) { ClientSocket = clientSocket; } public Socket ClientSocket { get; private set; } } class Program { static void Main(string[] args) { AppTCPServer server = new AppTCPServer("127.0.0.01", 8000); server.OnConnected += server_OnConnected; Console.WriteLine("按任意键结束程序……"); Console.ReadKey(); } static void server_OnConnected(object sender, ClientConnectedEventArgs e) { Socket client = e.ClientSocket; string hello = "Hello from AppTCPServer"; client.Send(Encoding.Default.GetBytes(hello)); } } 客户端测试程序 class Program { static void Main(string[] args) { //模拟100个客户连接服务器 for (int i = 0; i < 100; i++) { Socket socket = ConnectToServer("127.0.0.1", 8000); byte[] buffer = new byte[1024]; int bytesRecevied = socket.Receive(buffer, buffer.Length, SocketFlags.None); byte[] messageBytes = new byte[bytesRecevied]; Array.Copy(buffer, messageBytes, bytesRecevied); Console.WriteLine(Encoding.Default.GetString(messageBytes)); socket.Disconnect(false); socket.Close(); } Console.ReadKey(); static Socket ConnectToServer(string serverIP, int serverPort) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); EndPoint localEP = new IPEndPoint(IPAddress.Any, 0); socket.Bind(localEP); socket.Connect(new IPEndPoint(IPAddress.Parse(serverIP), serverPort)); return socket; } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么谷歌浏览器下载了,但是双击无法安装,
Y85和z1 4十64的,一样的钱,为什么85配置低
疼痛的近义词是什么?
皮尔洛哈维伊涅斯塔这三位中场大师谁的历史地
舒范路/Y471(路口)这个地址在什么地方,我要
环球壹号国际娱乐会所在什么地方啊,我要过去
实用近义词是什么
一个5毫升的空针抽2.6毫升的液体是多少?
淘宝连不上网了怎么回事
我发东西给客户,发快递,客户收到没有看是好
be fond of的同义词组
公司购买的网线计入什么科目
终于明白成功了没有可以分享的人,比一无所有
我为部门做一件事
毕业时为什么要互赠礼物
推荐资讯
充分行使监督权是公民参与国家和社会管理的基
abo耽美文军校生中的罗森和陵雨
求鸿业给排水11.0软件破解版 谢谢
泰国历史学家编的《老挝史》是如何描述中国人
①食物从生产收获到分销到都市里的消费者手中
我有一个疑惑。为什么大部分人都选择在年尾结
捐山里在哪里啊,我有事要去这个地方
求晋剧或者落子,完整的MP3音频。家里老人想
浙江的松树是什么品种,叫什么松
求问一本小说名字 女主名为李小鸾 内有情节
齿轮模数为3 齿数为66 齿数 中心距和模数不变
温泉桥/Y522(路口)在哪里啊,我有事要去这个
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?