C#网络编程——点对点聊天(用的是TcpClient)给分 各位高手们帮帮忙

xxl773593778 2010-07-04 09:21:14
写了点对点聊天 为什么老是连接不成功?运行的时候出现这个问题:
由于目标机器积极拒绝,无法连接,或者就是由于连接方在一段时间后没有正确答复或者没有反应。。。这是为什么???要怎样才可以实现点对点聊天?
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 = "";
}
}
}
}
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanya 2010-07-04
  • 打赏
  • 举报
回复
一台机器服务器
一台客户端就行
两端 端口号必须一致
Jiacker 2010-07-04
  • 打赏
  • 举报
回复
关闭Windows防火墙试一下
guohelv0519 2010-07-04
  • 打赏
  • 举报
回复
这是 Socket 编程中的基本错误,原因就是客户端尝试与服务器连接时设置的 IP 或 端口与服务器不一致。在初始化 TcpClient 的时候,所指定的参数必须指向服务器的 IPEndPoint。
fengboyangjinfeng 2010-07-04
  • 打赏
  • 举报
回复
tcpListener = new TcpListener(IPAdress.Any,888);
huwen7565833 2010-07-04
  • 打赏
  • 举报
回复
没有与服务器连接上!!

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧