C# TCP连接失败
我厌倦了找出我的代码有什么问题。。。请帮帮我 我正在尝试在LAN中的服务器和客户端之间创建TCP连接。发生的情况是,当客户端尝试连接时,程序崩溃。 请参阅代码:C# TCP连接失败,c#,.net,sockets,tcp,C#,.net,Sockets,Tcp,我厌倦了找出我的代码有什么问题。。。请帮帮我 我正在尝试在LAN中的服务器和客户端之间创建TCP连接。发生的情况是,当客户端尝试连接时,程序崩溃。 请参阅代码: public void Go() { if (whatjob == true) { IPEndPoint server_ipEndPoint = new IPEndPoint(IPAddress.Any, PortNum);
public void Go()
{
if (whatjob == true)
{
IPEndPoint server_ipEndPoint = new IPEndPoint(IPAddress.Any, PortNum);
server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server_socket.Bind(server_ipEndPoint);
try
{
server_socket.Listen(1);
server_GotClient = server_socket.Accept();
}
catch (SocketException e)
{
MessageBox.Show("Unable to listen...");
MessageBox.Show(e.ToString());
}
reading = new Thread(new ThreadStart(this.get_msg));
reading.Start();
}
if (whatjob == false)
{
IPEndPoint client_ipEndPoint = new IPEndPoint(IPAddress.Parse(IpAddress), PortNum);
client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
client_socket.Blocking = true;
client_socket.Connect(client_ipEndPoint); //here it stops execution
//client_socket.BeginConnect(client_ipEndPoint, new AsyncCallback(NowConnected), client_socket);
}
catch (SocketException e)
{
MessageBox.Show("Unable to connect...");
MessageBox.Show(e.ToString());
return;
}
reading = new Thread(new ThreadStart(this.get_msg));
reading.Start();
}
什么工作是布尔。。。true表示执行服务器作业,false表示执行客户端作业
此功能位于聊天窗口的windows窗体内。当它到达client_socket.connect(ipendpoint)时,它崩溃了,甚至聊天窗口也变形了
线程化函数
public void get_msg()
{
byte[] byte_message = new byte[1000];
string string_message = null;
int x = 0;
while (true)
{
if (server_GotClient != null)
{
x = server_GotClient.Receive(byte_message);
}
if (client_socket != null)
{
x = client_socket.Receive(byte_message);
}
if (x != 0)
{
string_message = Encoding.ASCII.GetString(byte_message);
this.richTextBox_GetMessage.Invoke(new MethodInvoker(delegate
{
richTextBox_GetMessage.Text = richTextBox_GetMessage.Text + "\nFriend: " + string_message;
}));
}
x = 0;
}
server_socket.Close();
}
有关此代码,请提供帮助。
更进一步地说,我不了解异步技术,请帮助我了解一些简单的方法。了解完整的错误消息会有所帮助 从您展示的内容来看,我的想法是抛出的异常不是SocketException。Socket.Connect的MSDN文档显示它可以抛出四个异常中的任何一个,包括SocketException 我会将catch中的异常类型更改为一个异常,并在开始括号中设置断点。下一次失败时,你将确切地知道出了什么问题,你可以从那里抓住并处理它 另外,我注意到,虽然您的客户机作业在连接错误时返回此方法,但服务器作业不会返回;捕获异常,显示消息,然后继续执行
reading=new Thread(new ThreadStart(this.get_msg))代码>。这可能会导致抛出您不期望的其他异常。除非你确定客户工作流程在这里失败,否则我会注意这个方法的另一面
关于多线程的帮助,有很多资源,包括其他问题,可以帮助您入门。目前还不清楚您想要多线程处理什么,以及您需要如何控制它,因此我试图给出的任何答案都可能有错误,这可能会让您更加沮丧,因为这不是正确的方法。谢谢,您的建议非常有帮助。我发现这不是真正的连接的东西造成的问题。。。但这是线。。。实际上,我正在表单加载时生成的事件中运行此函数。我想,我需要找到一些其他的方法来运行这个函数。。。你有什么想法吗?基本上,你应该重构事件处理程序,把所有繁重的工作放在一个方法中。然后,将该方法赋予将从处理程序启动的线程构造;有一个线程对象,ThreadPool,Delegate.BeginInvoke,BackgroundWorker组件等等。正如我所说,有很多方法可以设置它,其中一种可能是“最好的”。我完成了连接,我发现了错误。。。但是客户端的窗口仍然变形……,让我编辑这个问题,然后查看另一个线程化的函数,你是否看到了一些错误?@Jasim:与其留下“请…”的评论,不如每个问题问1个问题,并从中学习,以提供更好的信息。