C#写的socket通信为什么不能再两台电脑上连接

.Net技术 码拜 9年前 (2016-03-09) 1187次浏览
server

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace SocketServer
{
    class Program
    {
        private static byte[] result = new byte[1024];
        private static int myProt = 8000;   //端口   
        static Socket serverSocket;
        static void Main(string[] args)
        {
            //服务器IP地址   
            IPAddress ip = IPAddress.Parse("192.168.111.111");
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口   
            serverSocket.Listen(10);    //设定最多10个排队连接请求   
            Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
            //通过Clientsoket发送数据   
            Thread myThread = new Thread(ListenClientConnect);
            myThread.Start();
            Console.ReadLine();  
        }
        /// <summary>   
        /// 监听客户端连接   
        /// </summary>   
        private static void ListenClientConnect()  
        {  
            while (true)  
            {  
                Socket clientSocket = serverSocket.Accept();
                clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));  
                Thread receiveThread = new Thread(ReceiveMessage);  
                receiveThread.Start(clientSocket);  
            }  
        }  
  
        /// <summary>   
        /// 接收消息   
        /// </summary>   
        /// <param name="clientSocket"></param>   
        private static void ReceiveMessage(object clientSocket)  
        {  
            Socket myClientSocket = (Socket)clientSocket;
            while (true)  
            {  
                try  
                {  
                    //通过clientSocket接收数据   
                    int receiveNumber = myClientSocket.Receive(result);  
                    Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
                    myClientSocket.Send(Encoding.ASCII.GetBytes("Go hell"));
                }  
                catch(Exception ex)  
                {  
                    Console.WriteLine(ex.Message);  
                    myClientSocket.Shutdown(SocketShutdown.Both);  
                    myClientSocket.Close();  
                    break;  
                }  
            }
        } 
    }
}

client

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace SocketClient
{
    class Program
    {
        private static byte[] result = new byte[1024];
        static void Main(string[] args)
        {
            //设定服务器IP地址   
            IPAddress ip = IPAddress.Parse("192.168.111.111");
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                clientSocket.Connect(new IPEndPoint(ip,8000)); //配置服务器IP与端口   
                Console.WriteLine("连接服务器成功");
            }
            catch
            {
                Console.WriteLine("连接服务器失败,请按回车键退出!");
                return;
            }
            //通过clientSocket接收数据   
            int receiveLength = clientSocket.Receive(result);
            Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveLength));
            //通过 clientSocket 发送数据   
           
            for (int i = 0; i <1; i++)
            {
                try
                {
               Thread.Sleep(1000);    //等待1秒钟   
               string sendMessage = " helloworld";
                    clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
                    Console.WriteLine("向服务器发送消息:{0}", sendMessage);
               receiveLength = clientSocket.Receive(result);
                  Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveLength));                    
                }
                catch
                {
                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                    break;
                }
            }
            Console.WriteLine("发送完毕,按回车键退出");
            Console.ReadLine();
        }
    }
}
解决方案

20

第一次写这样的双方通讯程序,应该这样走:
1 下载一个有相似功能的测试工具,在两台电脑之间进行连接测试
2 写客户端与测试工具连接
3 写服务端与测试工具连接
4 客户端与服务端双方连接
道路是曲折的,前途是伟大的.LZ

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#写的socket通信为什么不能再两台电脑上连接
喜欢 (0)
[1034331897@qq.com]
分享 (0)