2013-03-03 127 views
0

我是C#中套接字编程的新手。已经疯狂搜索网络解决我的问题,但没有找到任何可以解决它的问题。所以继承人我的问题:C#套接字编程:服务器不接受客户端连接

我想写一个客户端服务器应用程序。目前,服务器也将在我的本地机器上运行。应用程序从客户端向服务器传输一个字节的数据流。 问题在于服务器没有检测到客户端连接请求,而客户端能够连接并传输字节流

这里是服务器代码:

String strHostName = Dns.GetHostName(); 
Console.WriteLine(strHostName); 
IPAddress ip = IPAddress.Parse("127.0.0.1"); 
ipEnd = new IPEndPoint(ip, port); 
soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 
soc.Bind(ipEnd); 

Console.WriteLine("Web Server Running... Press ^C to Stop..."); 

Thread th = new Thread(new ThreadStart(StartListen)); 
th.Start(); 

的StartListen线程如下:

public void StartListen() 
{ 
    try 
    { 
     while (true) 
     { 
      string message; 
      Byte[] bSend = new Byte[1024]; 
      soc.Listen(100); 

      if (soc.Connected) 
      { 
       Console.WriteLine("\nClient Connected!!\n==================\n CLient IP {0}\n", soc.RemoteEndPoint); 
       Byte[] bReceive = new Byte[1024 * 5000]; 
       int i = soc.Receive(bReceive); 

客户端代码如下:

hostIPAddress = IPAddress.Parse("127.0.0.1"); 
ipEnd = new IPEndPoint(hostIPAddress,port); 
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 

Console.WriteLine("Connecting to Server..."); 
clientSocket.Connect(ipEnd); 
Console.WriteLine("Sending File..."); 
clientSocket.Send(clientData); 
Console.WriteLine("Disconnecting..."); 
clientSocket.Close(); 
Console.WriteLine("File Transferred..."); 

现在发生的事情是,服务器启动,当我运行客户端时,它连接,发送和关闭。但是在服务器控制台上没有任何反应,它没有检测到任何连接:if(soc.Connected)保持为假

我检查服务器是否通过netstat监听127.0.0.1:5050,它确实在监听。不能找出问题。请帮忙。

回答

0

在服务器端使用Socket.Accept Method接受传入连接。该方法为新创建的连接返回Socket:该套接字可以使用Send()Receive()方法。

例如,在接受可以创建单独线程以处理客户端连接(即客户端会话)之后。

private void ClientSession(Socket clientSocket) 
{ 
    // Handle client session: 
    // Send/Receive the data. 
} 

public void Listen() 
{ 
    Socket serverSocket = ...; 

    while (true) 
    { 
     Console.WriteLine("Waiting for a connection..."); 
     var clientSocket = serverSocket.Accept(); 

     Console.WriteLine("Client has been accepted!"); 
     var thread = new Thread(() => ClientSession(clientSocket)) 
      { 
       IsBackground = true 
      }; 
     thread.Start(); 
    } 
} 
+0

谢谢,我也只是想出了我自己:) – 2013-03-03 17:53:39

+0

@MuhammadZeeshanArif,太好了。我刚刚添加了代码来说明这种方法。 – 2013-03-03 17:54:37

+0

亲爱的Down-voter,请注意解释原因。 – 2013-03-05 11:29:08

相关问题