c# tcplistener问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# tcplistener问题相关的知识,希望对你有一定的参考价值。
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连接更好。
明天就结贴,谢谢大家
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下载 参考技术A 改成下面试试.
1.IPAddress localAddr = IPAddress.Parse ( "127.0.0.1" );
不行的话可能是端口被占用了.
和客户端有没有连接没关系.
2.一对多的话需要服务端中转,如果使用TCP协议.至于p2p技术,我不了解,你可以了解下.
3.建一个客户端程序链接到8081服务端口然后发送数据包看看,客户端会受到转换成大写后的字符串.
4.其实你上面建立的c/s就是一个很简单,但功能基本实现的c/s即时聊天工具了. 参考技术B 直接跳到catch(SocketException e)应该是线程问题把 试下将用Control.CheckForIllegalCrossThreadCalls = false;这个或者
是用InvokeRequired这个属性 参考技术C 看看你的8081端口有没有被占用
C#网络编程的服务器类TcpListener
在C#的程序开发里,常常需要跟网络打交道,这是不可以避免的事情,因此学会使用C#来编写网络服务器程序是必备的技能。也许有一些人说,我们只需要开发客户端的程序,为什么要学习服务器的开发呢?因为调试客户端的程序需要服务器,在测试的过程里,不可能等别人的服务器开发出来再进行调试,肯定要自己写一个简单的服务器来测试,这是必要的步骤。
写TCP服务器,最简单的方式是使用TcpListener。
TcpListener和TcpClient类是对Socket的进一步封装,为基于TCP协议的网络通信提供更加便捷的调用方式。
TcpListener在服务器负责监听和接受客户端的连接请求,TcpClient类提供一系列可用于TCP网络通信的API,是以流的方式来读写数据的,调用GetStream的方法会发挥一个NetworkStream实例,即可发送和接收数据。
C#的TcpListener类与TcpClient类使得网络编程更加方便。
接下来简单介绍一下服务器与客户端通信的示例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace ConsoleApp6
{
class Program
{
private const int portNum = 13;
public static int Main(String[] args)
{
bool done = false;
var
以上是关于c# tcplistener问题的主要内容,如果未能解决你的问题,请参考以下文章