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连接更好。

明天就结贴,谢谢大家

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下载
参考技术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问题的主要内容,如果未能解决你的问题,请参考以下文章

c#_TcpListener&TcpClient

c# tcplistener问题

C#里TcpListener的阻塞式服务器

C#里TcpListener的阻塞式服务器

C#里TcpListener的阻塞式服务器

C# 在客户端和服务器上使用 TcpListener