刚接触socket。很简单的一个问题求助

king19840811 2009-01-10 12:44:09
private const int portNum = 13;
private void Form1_Load(object sender, EventArgs e)
{
bool done = false;
IPAddress local = IPAddress.Parse("127.0.0.1");
TcpListener listener = new TcpListener(local,portNum);
listener.Start();
while (!done)
{
textBox1.Text += "waiting for connection...";
TcpClient client = listener.AcceptTcpClient();//在这一行就不动了。界面显示不了。也不抛出异常

textBox1.Text += "Connection accepted\r\n";
NetworkStream ns= client.GetStream();
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());

try
{
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
listener.Stop();
}
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
king19840811 2009-01-10
  • 打赏
  • 举报
回复
在telnet下用 open 127.0.0.1 13测试了下端口13发现连接失败。有朋友遇到这个情况没有
注:我用的是vista
king19840811 2009-01-10
  • 打赏
  • 举报
回复
运行客户端出现由于目标计算机积极拒绝无法连接。我已经把所有的防火墙都关了。。已经打开telnet服务
much0726 2009-01-10
  • 打赏
  • 举报
回复
补上Invoke显示的代码:

delegate void addtxt(string str);
private void AddTxt(string str)
{
if (this.InvokeRequired)
{
this.Invoke(new addtxt(AddTxt), str);
}
else
{
textBox1.Text += str;
}
}

....
//textBox1.Text += "waiting for connection..."; 界面要用Invoke
//修改为->
AddTxt("waiting for connection...");

sxmonsy 2009-01-10
  • 打赏
  • 举报
回复
UP下
much0726 2009-01-10
  • 打赏
  • 举报
回复
将会卡的地方放在后台线程中,接收挂起连接的方法很多.就根据你的思路改改.

private const int portNum = 13;
TcpListener listener;
bool done = false;

private void Form1_Load(object sender, EventArgs e)
{
done = false;
IPAddress local = IPAddress.Parse("127.0.0.1");
listener = new TcpListener(local,portNum);
listener.Start();
Thread thread = new Thread(new ThreadStart(ListenThread));
thread.IsBackground = true;
thread.Start();
}

private void ListenThread()
{
while (!done)
{
//textBox1.Text += "waiting for connection..."; 界面要用Invoke
TcpClient client = listener.AcceptTcpClient();//在这一行就不动了。界面显示不了。也不抛出异常
//textBox1.Text += "Connection accepted\r\n";
NetworkStream ns= client.GetStream();
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());

try
{
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
listener.Stop();
}


yhy0611 2009-01-10
  • 打赏
  • 举报
回复

我试了一下你的程序,用telnet命令是可以连接成功的,你最好再检查一下本机的网络设置和防火墙。我用03系统
yhy0611 2009-01-10
  • 打赏
  • 举报
回复
运行客户端出现由于目标计算机积极拒绝无法连接。
================================================

你的客户端和服务器在同一台机器上吗?如果不是

IPAddress local = IPAddress.Parse("127.0.0.1");
改为
IPAddress local = IPAddress.Parse("0.0.0.0");
试一下
yhy0611 2009-01-10
  • 打赏
  • 举报
回复
TcpClient client = listener.AcceptTcpClient();//在这一行就不动了。界面显示不了。也不抛出异常
=================================================================

因为到这句的时候系统在等待连接接入,线程被阻塞了,一般的SOCKET程序都是多线程的,在子线程中接受连接,收发数据
king19840811 2009-01-10
  • 打赏
  • 举报
回复

110,534

社区成员

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

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

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