基于tcp的服务端客户端通信(基于tcp的服务端客户端通信python)

      最后更新:2022-11-03 16:07:24 手机定位技术交流文章

      VB中有tcp服务器和客户端,当两个客户端都连接上服务器的时候。客户端之间可以通信吗?

      两客户端不能直接通信; 如需通讯,可以由服务器端中转。
      VB中有tcp服务器和客户端,当两个客户端都连接上服务器的时候。客户端之间可以通信吗?

      C# TCP/IP中的客户端和服务器在局域网或外网怎么通信呀?谁有完整的例子呀.

      这是我以前在学校的时候做的一个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();}}} 这个可以跑的。。我以前就用过的。
      socket,局域网 是没有问题的,但是广域网,需要用p2p 我这里有老外写得socket、server和client,非p2p,在局域网测试过了。 但是代码太长,贴不完,需要的话 留下mail。
      这个得用p2p技术,普通的tcp/ip无法直接突破不同网段. 参看网址http://developer.51cto.com/art/200602/21200.htm
      把机器防火墙关了,地址对,端口可用肯定连得上
      项目?不会是北大青鸟的QQ吧。。。
      C# TCP/IP中的客户端和服务器在局域网或外网怎么通信呀?谁有完整的例子呀.

      C#基于Tcp协议的socket通信,知道服务端发送数据长度、帧头和发送频率,如何在客户端取得完整一帧数据?

      当然不能这么搞,TCP发送时都是分包的,也就是说你一次接收的数据很可能不是一个完整的数据包,这种东西在TCP里叫粘包和拆包,网上解决方法已经很多了,你可以搜索下 TCP粘包,拆包现象及解决方案C#粘包和分包问题及解决方法 注:正常情况下,你的接收和数据处理应该是两个单独的线程,这样才不会相互干扰。
      ? 国外评价6 版本系统
      C#基于Tcp协议的socket通信,知道服务端发送数据长度、帧头和发送频率,如何在客户端取得完整一帧数据?

      TCP/IP的 服务器和客户端之间的socket通信,一般用什么函数来发送数据?

      看你用什么语言;了 C# 里面如果你用tcpclient tcplistener的话 这是对networkstream进行读写 write是发 read是收send跟wirte都是视为发送 recv跟read都视为收取 可能区分在于 一个发送字符 一个发送byte[]的区别吧
      TCP/IP的 服务器和客户端之间的socket通信,一般用什么函数来发送数据?

      TCP客户端程序和TCP服务器程序在局域网内无法通信

      这是我以前在学校的时候做的一个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();}}} 这个可以跑的。。我以前就用过的。
      TCP客户端程序和TCP服务器程序在局域网内无法通信

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/42128.html

          热门文章

          文章分类