C#套接字编程:服务器不接受客户端连接
问题描述:
我是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,它确实在监听。不能找出问题。请帮忙。
答
在服务器端使用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();
}
}
谢谢,我也只是想出了我自己:) – 2013-03-03 17:53:39
@MuhammadZeeshanArif,太好了。我刚刚添加了代码来说明这种方法。 – 2013-03-03 17:54:37
亲爱的Down-voter,请注意解释原因。 – 2013-03-05 11:29:08