解决方案 »

  1.   

    你在receveData()里调用ServerSocket.Accept();是毫无道理的, 重新看书吧
      

  2.   

    用法完全错误.
    应该是先侦听到有连接,然后去获取数据
    再重新侦听,重新获取
    你现在获取数据的while循环里开侦听,不卡死才怪
    网上很多现成的代码,好好看看,不要凭想象自己瞎写
      

  3.   

    有连接的时候,一般另起一个socket来接收数据: Socket handler = listener.Accept();
    就像楼上说的receveData()里调用ServerSocket.Accept();去掉
    参考: 同步服务器存储示例using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;public class SynchronousSocketListener {
        
        // Incoming data from the client.
        public static string data = null;    public static void StartListening() {
            // Data buffer for incoming data.
            byte[] bytes = new Byte[1024];        // Establish the local endpoint for the socket.
            // Dns.GetHostName returns the name of the 
            // host running the application.
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);        // Create a TCP/IP socket.
            Socket listener = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp );        // Bind the socket to the local endpoint and 
            // listen for incoming connections.
            try {
                listener.Bind(localEndPoint);
                listener.Listen(10);            // Start listening for connections.
                while (true) {
                    Console.WriteLine("Waiting for a connection...");
                    // Program is suspended while waiting for an incoming connection.
                    Socket handler = listener.Accept();
                    data = null;                // An incoming connection needs to be processed.
                    while (true) {
                        bytes = new byte[1024];
                        int bytesRec = handler.Receive(bytes);
                        data += Encoding.ASCII.GetString(bytes,0,bytesRec);
                        if (data.IndexOf("<EOF>") > -1) {
                            break;
                        }
                    }                // Show the data on the console.
                    Console.WriteLine( "Text received : {0}", data);                // Echo the data back to the client.
                    byte[] msg = Encoding.ASCII.GetBytes(data);                handler.Send(msg);
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
                
            } catch (Exception e) {
                Console.WriteLine(e.ToString());
            }        Console.WriteLine("\nPress ENTER to continue...");
            Console.Read();
            
        }    public static int Main(String[] args) {
            StartListening();
            return 0;
        }
    }