写了点对点聊天 为什么老是连接不成功?运行的时候出现这个问题:由于目标机器积极拒绝,无法连接,或者就是由于连接方在一段时间后没有正确答复或者没有反应这是为什么???要怎样才可以实现点对点聊天?
PS:运行程序的时候是不是需要两个用户分别运行客户端程序,然后再用一台电脑来运行服务器程序?
代码如下:namespace P2PChat
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private Thread td;
private TcpListener tcpListener;
private static string message = ""; private void frmMain_Load(object sender, EventArgs e)
{
td = new Thread(new ThreadStart(this.StartListen));
td.Start();
timer1.Start();
} private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
} private void button2_Click(object sender, EventArgs e)
{
try
{
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());
string strmsg = " "+txtName.Text + "("+ip[0].ToString()+") "+DateTime.Now.ToLongTimeString()+"\n" +" "+ this.rtbSend.Text + "\n";
TcpClient client = new TcpClient(txtIP.Text, 888);
NetworkStream netstream = client.GetStream();
StreamWriter wstream = new StreamWriter(netstream, Encoding.Default);
wstream.Write(strmsg);
wstream.Flush();
wstream.Close();
client.Close();
rtbContent.AppendText(strmsg);
rtbContent.ScrollToCaret();
rtbSend.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void StartListen()
{
message = "";
tcpListener = new TcpListener(888);
tcpListener.Start();
while (true)
{
TcpClient tclient = tcpListener.AcceptTcpClient(); //接受连接请求
NetworkStream nstream = tclient.GetStream(); //获取数据流
byte[] mbyte = new byte[1024]; //建立缓存
int i = nstream.Read(mbyte, 0, mbyte.Length); //将数据流写入缓存
message = Encoding.Default.GetString(mbyte, 0, i);
}
} private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
if (this.tcpListener != null)
{
tcpListener.Stop();
}
if (td != null)
{
if (td.ThreadState == ThreadState.Running)
{
td.Abort();
}
}
} private void button1_Click(object sender, EventArgs e)
{
rtbContent.Clear();
} private void rtbSend_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
{
button2_Click(sender,e);
}
} private void timer1_Tick(object sender, EventArgs e)
{
if (message != "")
{
rtbContent.AppendText(message);
rtbContent.ScrollToCaret();
message = "";
}
}
}
}
PS:运行程序的时候是不是需要两个用户分别运行客户端程序,然后再用一台电脑来运行服务器程序?
代码如下:namespace P2PChat
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private Thread td;
private TcpListener tcpListener;
private static string message = ""; private void frmMain_Load(object sender, EventArgs e)
{
td = new Thread(new ThreadStart(this.StartListen));
td.Start();
timer1.Start();
} private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
} private void button2_Click(object sender, EventArgs e)
{
try
{
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());
string strmsg = " "+txtName.Text + "("+ip[0].ToString()+") "+DateTime.Now.ToLongTimeString()+"\n" +" "+ this.rtbSend.Text + "\n";
TcpClient client = new TcpClient(txtIP.Text, 888);
NetworkStream netstream = client.GetStream();
StreamWriter wstream = new StreamWriter(netstream, Encoding.Default);
wstream.Write(strmsg);
wstream.Flush();
wstream.Close();
client.Close();
rtbContent.AppendText(strmsg);
rtbContent.ScrollToCaret();
rtbSend.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void StartListen()
{
message = "";
tcpListener = new TcpListener(888);
tcpListener.Start();
while (true)
{
TcpClient tclient = tcpListener.AcceptTcpClient(); //接受连接请求
NetworkStream nstream = tclient.GetStream(); //获取数据流
byte[] mbyte = new byte[1024]; //建立缓存
int i = nstream.Read(mbyte, 0, mbyte.Length); //将数据流写入缓存
message = Encoding.Default.GetString(mbyte, 0, i);
}
} private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
if (this.tcpListener != null)
{
tcpListener.Stop();
}
if (td != null)
{
if (td.ThreadState == ThreadState.Running)
{
td.Abort();
}
}
} private void button1_Click(object sender, EventArgs e)
{
rtbContent.Clear();
} private void rtbSend_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
{
button2_Click(sender,e);
}
} private void timer1_Tick(object sender, EventArgs e)
{
if (message != "")
{
rtbContent.AppendText(message);
rtbContent.ScrollToCaret();
message = "";
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货