下面是一个点对点简单的俩天程序,为什么我生成可以成功,运行起来也没问题,但是只要我用两台机器测试,测试结果对方接收不到,这个问题不算,我还没完善,关键的问题是,只要是两台电脑测试以后,关闭这个程序,再运行就会出错,自动关闭,调试的说是 this.TcpListener.Start();这句有问题,大家帮我解释解释,另外一个问题,监听建立之后,是怎么样把监听结果付给byte[] 的?代码是从网上搜集的,我是初学,谢谢
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.IO;namespace lsChat
{
public partial class Form1 : Form
{
private TcpListener TcpListener;
private Thread sends;
private Thread Listener; public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Listener = new Thread(new ThreadStart(StartListen));
this.Listener.Start();
} private void StartListen()
{
this.TcpListener = new TcpListener(19808);
this.TcpListener.Start();
while (true)
{
TcpClient TcpClient = this.TcpListener.AcceptTcpClient();
NetworkStream MyStream = TcpClient.GetStream();
byte[] bytes = new byte[2048];
int bytesRead = MyStream.Read(bytes, 0, bytes.Length);
string message = System.Text.Encoding.UTF8.GetString(bytes, 0, bytesRead);
//string message = bytesRead.ToString();
this.richTextBox1.Text += message + "\n";
}
}
private void button1_Click(object sender, System.EventArgs e)
{
if (sends == null || !sends.IsAlive)
{
sends = new Thread(new ThreadStart(send));
sends.Start();
}
else
MessageBox.Show("发送过快!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
} private void button2_Click(object sender, System.EventArgs e)
{
MessageBox.Show("by 无天无涯.\n输入对方IP地址,只要双方都打开本程序即可聊天...");
} private void send()
{
if (this.ip.Text.Length < 7)
{
MessageBox.Show("IP地址错误!", "错误信息:");
return;
}
//if (this.richTextBox1.Text.Length < 1)
//{
// return;
//}
try
{
string Message = this.NickName.Text + ":" + this.richTextBox1.Text;
TcpClient TcpClient = new TcpClient(this.ip.Text, 19808);
NetworkStream tcpStream = TcpClient.GetStream();
StreamWriter stream = new StreamWriter(tcpStream);
stream.Flush();
stream.Write(Message);
stream.Close();
TcpClient.Close();
this.richTextBox2.AppendText(Message + "\n");
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "错误信息:", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
sends.Abort();
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.IO;namespace lsChat
{
public partial class Form1 : Form
{
private TcpListener TcpListener;
private Thread sends;
private Thread Listener; public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Listener = new Thread(new ThreadStart(StartListen));
this.Listener.Start();
} private void StartListen()
{
this.TcpListener = new TcpListener(19808);
this.TcpListener.Start();
while (true)
{
TcpClient TcpClient = this.TcpListener.AcceptTcpClient();
NetworkStream MyStream = TcpClient.GetStream();
byte[] bytes = new byte[2048];
int bytesRead = MyStream.Read(bytes, 0, bytes.Length);
string message = System.Text.Encoding.UTF8.GetString(bytes, 0, bytesRead);
//string message = bytesRead.ToString();
this.richTextBox1.Text += message + "\n";
}
}
private void button1_Click(object sender, System.EventArgs e)
{
if (sends == null || !sends.IsAlive)
{
sends = new Thread(new ThreadStart(send));
sends.Start();
}
else
MessageBox.Show("发送过快!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
} private void button2_Click(object sender, System.EventArgs e)
{
MessageBox.Show("by 无天无涯.\n输入对方IP地址,只要双方都打开本程序即可聊天...");
} private void send()
{
if (this.ip.Text.Length < 7)
{
MessageBox.Show("IP地址错误!", "错误信息:");
return;
}
//if (this.richTextBox1.Text.Length < 1)
//{
// return;
//}
try
{
string Message = this.NickName.Text + ":" + this.richTextBox1.Text;
TcpClient TcpClient = new TcpClient(this.ip.Text, 19808);
NetworkStream tcpStream = TcpClient.GetStream();
StreamWriter stream = new StreamWriter(tcpStream);
stream.Flush();
stream.Write(Message);
stream.Close();
TcpClient.Close();
this.richTextBox2.AppendText(Message + "\n");
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "错误信息:", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
sends.Abort();
}
}
}
}
运行程序的话就报,程序遇到问题需要关闭,抱歉,然后提示向微软发送错误报告这个时候如果用vs再次调试程序,就会报this.TcpListener.Start();的错误,提示是:
通常每个套接字地址(协议/网络地址/端口)只允许使用一次。我不明白这么回事
再个你的TcpListener实例化位置应该独立开来吧
Application.Exit();
private Thread sends;
private Thread Listener;
bool isDo = false;
private void Form2_Load(object sender, EventArgs e)
{
this.Listener = new Thread(new ThreadStart(StartListen));
this.Listener.Start();
}
private void button1_Click(object sender, EventArgs e)
{
if (sends == null || !sends.IsAlive)
{
sends = new Thread(new ThreadStart(send));
sends.Start();
}
else
MessageBox.Show("发送过快!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}
private void StartListen()
{
isDo = true;
this.TcpListener = new TcpListener(19808);
this.TcpListener.Start();
while (isDo)
{
TcpClient TcpClient = this.TcpListener.AcceptTcpClient();
NetworkStream MyStream = TcpClient.GetStream();
byte[] bytes = new byte[2048];
int bytesRead = MyStream.Read(bytes, 0, bytes.Length);
string message = System.Text.Encoding.UTF8.GetString(bytes, 0, bytesRead);
//string message = bytesRead.ToString();
this.Invoke(new MethodInvoker(delegate
{
this.richTextBox1.Text += message + "\n";
}));
}
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("by 无天无涯.\n输入对方IP地址,只要双方都打开本程序即可聊天...");
}
private void send()
{
this.Invoke(new MethodInvoker(delegate{
if (this.ip.Text.Length < 7)
{
MessageBox.Show("IP地址错误!", "错误信息:");
return;
}
try
{
string Message = this.NickName.Text + ":" + this.richTextBox1.Text;
TcpClient TcpClient = new TcpClient(this.ip.Text, 19808);
NetworkStream tcpStream = TcpClient.GetStream();
StreamWriter stream = new StreamWriter(tcpStream);
stream.Flush();
stream.Write(Message);
stream.Close();
TcpClient.Close();
this.richTextBox2.AppendText(Message + "\n");
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "错误信息:", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
sends.Abort();
}
}));
}private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
isDo = false;
this.Listener.Abort();
this.TcpListener.Stop();
this.sends.Abort();
}