c语言tcp局域网通信不了,TCP客户端程序和TCP服务器程序在局域网内无法通信

这是一个C#实现的简单C/S架构聊天系统,包括客户端和服务器端的代码。客户端通过UDP发送和接收消息,服务器端同样使用UDP接收并回显消息,实现了基本的聊天功能。代码中包含了多线程处理,用于接收和发送信息,以及窗体的动态显示效果。
摘要由CSDN通过智能技术生成

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

srwrm

推荐于 2017.10.11

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:54%    等级:13

已帮助:9814人

这是我以前在学校的时候做的一个c/s系统里面的类似qq聊天工具

你看看。。

这是客服端的代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Threading;

using System.Net;

using System.Net.Sockets;

namespace demo2

{

public partial class frmTouchWe : Form

{

Thread a;

//发送IP跟端口

private UdpClient udp = new UdpClient("127.0.0.1",9000);

//接收端口

private UdpClient udpSend = new UdpClient(8000);

private IPEndPoint ip = new IPEndPoint(IPAddress.Any,0);

public frmTouchWe()

{

InitializeComponent();

Form.CheckForIllegalCrossThreadCalls = false;

}

private void frmTouchWe_Load(object sender, EventArgs e)

{ //定义线程开始

a = new Thread(new ThreadStart(Run));

a.Start(); }

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

{

//客服接收信息。弹出窗体

frmAnswerInfo answerInfo = new frmAnswerInfo();

answerInfo.Show(); }

private void button1_Click(object sender, EventArgs e)

{

//在自己的信息栏中显示自己的信息

lsbInfo.Items.Add(txtInfo.Text);

//用户信息内容

string Mes = txtInfo.Text;

//用户信息

string mes = "用户:"+Program.user.id+"("+Program.user.name+")"+" " + time;

//转换成字节

byte[] b = UTF8Encoding.UTF8.GetBytes(Mes);

byte[] bb = UTF32Encoding.UTF8.GetBytes(mes);

//发送信息

udp.Send(bb, bb.Length);

udp.Send(b, b.Length);

txtInfo.Text = "";

}

//循环接受客服发来的信息

private void Run()

{

while (true)

{

byte[] b = udpSend.Receive(ref ip);

string mes = UTF8Encoding.UTF8.GetString(b);

lsbInfo.Items.Add(mes);

}

}

private void button2_Click(object sender, EventArgs e)

{

this.Close();

}

private void button3_Click_1(object sender, EventArgs e)

{

//清空所有项

lsbInfo.Items.Clear();

}

}

}

下面是服务器端的代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Threading;

using System.Net;

using System.Net.Sockets;

namespace demo2

{

public partial class frmAnswerInfo : Form

{

//定义一条线程,用来循环接收客户发来的信息

Thread a;

//定义另一条线程,用来升起窗体

Thread b;

//发送到信息的地址

private UdpClient udpSend = new UdpClient("127.0.0.1",8000);

//接收端口

private UdpClient udp = new UdpClient(9000);

private IPEndPoint ip = new IPEndPoint(IPAddress.Any,0);

public frmAnswerInfo()

{

InitializeComponent();

Form.CheckForIllegalCrossThreadCalls = false;

}

//循环接收信息

private void Run()

{

while (true)

{

byte[] b = udp.Receive(ref ip);

string mes = UTF8Encoding.UTF8.GetString(b);

lsbInfo.Items.Add(mes);

}

}

private void frmAnswerInfo_Load(object sender, EventArgs e)

{

//设置窗体的位置属性(窗体加载时候慢慢从右下角升上来~类似qq广告~~)

this.Top = Screen.PrimaryScreen.WorkingArea.Height;

this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;

//设置窗体的名字

a = new Thread(new ThreadStart(Run));

b = new Thread(new ThreadStart(run));

//开始线程

a.Start();

b.Start();

}

//用户点击谈话时显示该窗体

private void run()

{

while (true)

{

this.Top = this.Top - 10;

Thread.Sleep(100);

if (Screen.PrimaryScreen.WorkingArea.Height - this.Height >= this.Top)

{

break;

}

}

}

//发送按钮编码

private void button1_Click(object sender, EventArgs e)

{

//获取当前时间

DateTime time = DateTime.Now;

//在自己的信息栏中显示自己发出去的信息

lsbInfo.Items.Add("在线客服:"+time);

lsbInfo.Items.Add(txtInfo.Text);

//在客户端显示自己的信息标题

string mes = "在线客服:"+time;

//信息内容

string Mes = txtInfo.Text;

//发送信息标题

byte[] b = UTF8Encoding.UTF8.GetBytes(mes);

//发送信息内容

byte[] bb = UTF8Encoding.UTF8.GetBytes(Mes);

udpSend.Send(b, b.Length);

udpSend.Send(bb,bb.Length);

txtInfo.Text = "";

}

private void button2_Click(object sender, EventArgs e)

{

this.Close();

}

private void button3_Click(object sender, EventArgs e)

{

//清除所有项

lsbInfo.Items.Clear();

}

}

}

这个可以跑的。。我以前就用过的。

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值