这是我以前在学校的时候做的一个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();
}
}
}
这个可以跑的。。我以前就用过的。
温馨提示:内容为网友见解,仅供参考
C# TCP\/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 frm...
C# 跨网通信的问题
如果不用服务端也可以,就是发送的数据问题了,包含内网IP,外网IP,然后另一个客户端分别截取,先寻找外网IP,然后通过路由,找内网IP。腾讯就是用的第一种办法,不过腾讯有N多个服务器。。。
C#的web项目怎么实现tcp\/ip通信呢
服务端usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Net.Sockets;namespaceSocketSer{classProgram{[STAThread]staticvoidMain(string[]args){intrecv;byte[]data=newbyte[1024];IPEndPointipep=newIPEndPoint(IPAddress.Any,9050);Socketnewsock=newSocket(AddressFa...
C# 怎么在广域网之间进行文件传送,TCP UDP的都行
对于你的问题,如果双方都在内网而且不在同一网段,楼上的朋友的办法不能解决实质问题,建议需要借用打洞技术实现通信。打洞基本原理是A B分别在不同的内网,A第一次给B发送数据时会被B的路由器拦截掉的,但是在此之后B若需要给A发送数据,由于之前A希望与B通信(),A的路由器会允许B发送的数据通过...
C#程序怎么获得外网IP和内网IP?
1、企业网内部的工作站通过出口路由器的NAT转换能够上Internet网。 2、企业网(目前来说大部分是教育网)内部有一些服务器,如图中的Server,本身具有私网IP地址10.0.0.3,而且需要被公网所访问,所以需要在企业网的出口处对其做静态NAT转换,将其转换为一个公网IP地址2.0.0.5。企业外部的公网...
请教c#中怎样实现不同局域网下的点对点通信?谢谢!!!
1、是。不行 2、利用UPnP在路由器上添加端口映射(需要路由器支持),或者在路由器上设置来添加端口映射(需要路由器支持)。后者的话你的局域网机器需要有静态IP 3、能,在路由器上设置静态NAT(需要路由器支持)因为这些设置根据路由器的不同而不同,所以没办法跟你说详细……...
C# TCP连接由于目标机器积极拒绝,无法连接
TCP客户端与服务器端异常总结:在局域网连接正常的情况下,放在外网固定IP上报错,解决方法 1,查看端口是否已被服务器上其他程序占用。2,查看端口是否在监听和你使用的线程是否已开启。3,检查一下连接线。方法:本地连接》》状态》》属性》》tcp\/ip协议》》属性》》高级》》选项》》属性》》启用 TCP\/...
c#tcp 内网连接公网固定ip
正常只要端口映射成功了,只管往路由器的(也就是你的公网IP)发数据就行,具体转发到内网的那一台机器是路由器的任务,与你的程序无关,如大部分的web服务都是在内网的,浏览器根本就不用修改就能访问。你的问题可能不是出在程序本身,从更多方向检查下吧。但我不能给更多的建议了(想不出来)。
C#TCP通信问题: 客户端发送的消息只能收到第一条,必须断开重新连接...
你代码写的有问题,Encoding没办法处理断掉的字节,比如现在utf-8有可能用三个字节存储一个数据,当只发送了一个或者两个,Encoding就只能返回前面的数据了。建议你使用Encoder和Decoder发送数据,他会记住之前解析不了的数据,并且和新的数据合并。
c# TCP\/IP 自动断开
当建立一个TCP连接时,服务器端会继续用原有端口监听,同时用这个端口与客户端通信。而客户端默认情况 下会使用一个随机端口与服务器端的监听端口通信。有时候,为了服务器端的安全性,我们需要对客户端进行 验证,即限定某个IP某个特定端口的客户端。客户端可以使用bind来使用特定的端口。 对于服务器端,当设置了SO_...