c# tcplistener问题

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Da... using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace ListionServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}
private void ListenData()
{
TcpListener server = null;
try
{ Int32 port = 8011;
IPAddress localAddr = IPAddress.Parse("192.168.60.80");
server = new TcpListener(localAddr, port);
listBox1.Items.Add("Address=127.0.0.1 Port=8081");
server.Start();
Byte[] bytes = new Byte[256];
String data = null;
while (ListenState)
{
listBox1.Items.Add("Waiting for a connection... ");
TcpClient client = server.AcceptTcpClient();
listBox1.Items.Add("Connected!");
data = null;
NetworkStream stream = client.GetStream();
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
listBox1.Items.Add("Received: " + data);
data = data.ToUpper();
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
stream.Write(msg, 0, msg.Length);
listBox1.Items.Add("Sent: " + data);
}
client.Close();
}
}
catch (SocketException e)
{
listBox1.Items.Add("SocketException: " + e.ToString());
}
finally
{
server.Stop();
}
}
private void button1_Click(object sender, EventArgs e)
{
tr = new Thread(new ThreadStart(ListenData));
tr.Start();
}
private void button2_Click(object sender, EventArgs e)
{
ListenState = false;
listBox1.Items.Add(tr.IsAlive.ToString());
tr.Join();
}
private Thread tr;
private bool ListenState = true;
}
}
///////////////这是服务器端的代码////////////////////////////////

问题:
1:运行到server.Start();的时候就直接跳到catch (SocketException e)
是因为我没写客户端代码的问题吗? 如果是的话,客户端(和服务器不在一个解决项目里)我应该怎么写?

2:1对多人聊天的程序该怎么来设计?

3:怎么测试比较方便?

4:c/s及时聊天工具,能给个代码全一点的连接地址么?
to:lcg1986 - 总监 九级

3.写个小DEMO的Client//可以说得详细些吗?给个符合我这程序的DEMO连接更好。

明天就结贴,谢谢大家
展开
 我来答
lcg1986
2009-06-08 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1612万
展开全部
1.不是.Start只是开始监听.没有客户端也没问题.既然有Exception,你怎么不看看e.Message呢,里面有详细的错误原因.我觉得的可能原因有2个, 首先确认你的8011端口没有被站用.
IPAddress localAddr = IPAddress.Parse("192.168.60.80");
改成 IPAddress localAddr = IPAddress.Parse("127.0.0.1");
这样IP变动就不会影响程序.

2.内网通讯不用服务器的.直接UDP组播.非常方便.当然你也可以用TCP.服务器转发消息.

3.写个小DEMO的Client

4.可以去codeproject下载
kid83
2009-06-08 · TA获得超过2081个赞
知道大有可为答主
回答量:1818
采纳率:0%
帮助的人:1992万
展开全部
改成下面试试.
1.IPAddress localAddr = IPAddress.Parse ( "127.0.0.1" );
不行的话可能是端口被占用了.
和客户端有没有连接没关系.
2.一对多的话需要服务端中转,如果使用TCP协议.至于p2p技术,我不了解,你可以了解下.
3.建一个客户端程序链接到8081服务端口然后发送数据包看看,客户端会受到转换成大写后的字符串.
4.其实你上面建立的c/s就是一个很简单,但功能基本实现的c/s即时聊天工具了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-08-29
展开全部
直接跳到catch(SocketException e)应该是线程问题把 试下将用Control.CheckForIllegalCrossThreadCalls = false;这个或者
是用InvokeRequired这个属性
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiubit
2009-06-08 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:0
展开全部
看看你的8081端口有没有被占用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式