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连接更好。
明天就结贴,谢谢大家 展开
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连接更好。
明天就结贴,谢谢大家 展开
展开全部
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下载
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下载
展开全部
改成下面试试.
1.IPAddress localAddr = IPAddress.Parse ( "127.0.0.1" );
不行的话可能是端口被占用了.
和客户端有没有连接没关系.
2.一对多的话需要服务端中转,如果使用TCP协议.至于p2p技术,我不了解,你可以了解下.
3.建一个客户端程序链接到8081服务端口然后发送数据包看看,客户端会受到转换成大写后的字符串.
4.其实你上面建立的c/s就是一个很简单,但功能基本实现的c/s即时聊天工具了.
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这个属性
是用InvokeRequired这个属性
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看你的8081端口有没有被占用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询