c# - SocketException试图连接到服务器“连接尝试失败,因为连接方在一段时间后没有正确响应”
问题描述
我有一个服务器,它只是一个侦听我计算机端口的程序。我有一个客户端程序,它连接到这个端口,发送请求并获得响应。为此,我使用System.Net.Socket
带有 tcp 协议的类。
问题是当服务器在同一台计算机上时我的客户端可以连接,但是当我将客户端交给其他人时,它不起作用。SocketException : 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。我不明白,但当我刚刚开始时,我觉得有些东西对我隐藏了......
这是我的代码:
客户:
private void Connect_Click(object sender, EventArgs e)
{
try
{
sock.Connect(new IPEndPoint(IPAddress.Parse(ip.Text), 1234));
new Thread(() =>
{
read();
}).Start();
}
catch (Exception ex)
{
//Manage exception
}
}
private void read()
{
while (true)
{
try
{
byte[] buffer = new byte[255];
int rec = sock.Receive(buffer, 0, buffer.Length, SocketFlags.None);
if (rec <= 0)
throw new SocketException();
Array.Resize(ref buffer, rec);
//Displaying received data
Invoke((MethodInvoker)delegate
{
requests.Items.Add(Encoding.Default.GetString(buffer));
});
}
catch
{
MessageBox.Show("DISCONNECTED");
sock.Close();
break;
}
}
Application.Exit();
}
服务器:
private void Listen()
{
server.Listen(0);
new Thread(AcceptOneConnection).Start();
}
private void AcceptOneConnection()
{
if (client != null)
client.Close();
client = server.Accept();
MessageBox.Show("Client accepted");
while (true)
{
string received = ReceiveData();
if (received == "stop connection")
break;
string[] request = received.Split(' ');
switch (request[0])
{
case "register":
Register(request);
break;
case "login":
Login(request);
break;
case "disconnect":
UsersManager.Disconnect();
SendData("Disconnected");
break;
default:
SendData("Unknown request");
break;
}
}
client.Close();
}
private string ReceiveData()
{
try
{
byte[] buffer = new byte[255];
int rec = client.Receive(buffer, 0, buffer.Length, 0);
if (rec <= 0)
throw new SocketException();
Array.Resize(ref buffer, rec);
return Encoding.ASCII.GetString(buffer);
}
catch
{
return "";
}
}
我应该改变什么以使拥有客户端的人能够连接到服务器?
解决方案
推荐阅读
- python-3.x - Python3 Wolframalpha 给出错误:urllib.error.URLError
- python - pandas - 根据时间序列中的变化指示创建重复数据
- msp430 - MSP430G2553:连续 ADC10 采样(带中断)
- java - 使用 ThreeTen-Extra 解析 YearQuarter 时可以拒绝多个季度数字吗?
- c# - 使用c#在excel中查找满足多个条件的行
- javascript - 构造函数模式的工厂模式等价物
- javascript - 在组件状态和带有 redux 的道具中使用相同的变量名,我得到未定义道具的错误
- c# - ItemControl 自定义样式第一项
- php - Mysql 查询 vs php 查询给了我错误的结果
- node.js - 在 NodeJs 中将有效负载流式传输到 S3