tcp客户端连不上服务端(TCP客户端和服务端)

      最后更新:2022-11-13 17:21:47 手机定位技术交流文章

      客户端可以链接上自建的tcp服务器,但是物联网模块不能链接上(模块可以连接上自己的服务器)?

      这种情况要抓包啊,你自己的应用你自己肯定是最清楚使用那那些协议,这些协议必定对应相关报文,可以直接通过报文的收发情况和报错情况直接判断根因,通过根因来判断是那里出了问题。
      客户端可以链接上自建的tcp服务器,但是物联网模块不能链接上(模块可以连接上自己的服务器)?

      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服务器程序在局域网内无法通信

      TCP连接相关

      为什么要有三次握手,因为如果只有两次握手,那么第一次:客户端发送一个syn包给服务器,里面有一个随机生成的syn,然后客户端处于syn_send状态第二次:服务端收到客户端发来的syn包之后,确认syn包,也就是生成一个ack=syn+1,然后再自己随机生成一个syn包,即syn+ack包,然后返回给客户端,自己变成syn_recv状态第三次:客户端收到服务端发来的syn+ack包之后,确认ack是正确的之后,返回一个ack=syn+1给服务端,此包发送完毕,客户端进入了ESTABLISHED状态,服务端收到ack包后也进入ESTABLISHED状态。SYN攻击,当第二次握手服务端发送了syn+ack包之后,收到客户端发送的ack之前这段时间的tcp链接成为半连接,此时服务端处于syn_recv状态。当大量客户端随机IP疯狂发送tcp链接请求时,客户端以为是不同用户的请求,所以队列中全是半连接,然后导致服务器宕机,正常请求被丢弃。第一个包发送过程丢失A会周期性超时重传,直到收到B的确认第二个包发送过程丢失B会周期性超时重传,直到收到A的确认第三个包发送过程丢失A发送完数据后单方面进入TCP的ESTABLISHED状态,B还处于半链接:TCP协议为什么需要三次握手?第一次:客户端发送一个fin给服务端表示自己要断开连接了,然后进入fin_wait_1状态第二次:服务端收到fin后,发送一个ack=fin+1给客户端,服务端进入close_wait状态,客户端进入fin_wait_2状态第三次:服务端发送一个fin,用来关闭服务端到客户端的数据传输,服务端进入last_ack状态第四次:客户端收到fin后,进入time_wait状态,然后发送一个ack=fin+1给服务端,服务端确认后进入close状态,完成四次挥手TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化。答案解析:浏览器对并发请求的数目限制是针对域名的,即针对同一域名(包括二级域名)在同一时间支持的并发请求数量的限制。如果请求数目超出限制,则会阻塞。因此,网站中对一些静态资源,使用不同的一级域名,可以提升浏览器并行请求的数目,加速界面资源的获取速度。在 HTTP/1.0 中,一个http请求收到服务器响应后,会断开对应的TCP连接。这样每次请求,都需要重新建立TCP连接,这样一直重复建立和断开的过程,比较耗时。所以为了充分利用TCP连接,可以设置头字段 Connection: keep-alive ,这样http请求完成后,就不会断开当前的TCP连接,后续的http请求可以使用当前TCP连接进行通信。第一次访问有初始化连接和SSL开销初始化连接和SSL开销消失了,说明使用的是同一个TCP连接。HTTP/1.1 将 Connection 写入了标准,默认值为 keep-alive 。除非强制设置为 Connection: close ,才会在请求后断开TCP连接。所以这一题的答案就是:默认情况下建立的TCP连接不会断开,只有在请求头中设置 Connection: close 才会在请求后关闭TCP连接。HTTP/1.1 中,单个TCP连接,在同一时间只能处理一个http请求,虽然存在Pipelining技术支持多个请求同时发送,但由于实践中存在很多问题无法解决,所以浏览器默认是关闭,所以可以认为是不支持同时多个请求。HTTP2 提供了多路传输功能,多个http请求,可以同时在同一个TCP连接中进行传输。页面资源请求时,浏览器会同时和服务器建立多个TCP连接,在同一个TCP连接上顺序处理多个HTTP请求。所以浏览器的并发性就体现在可以建立多个TCP连接,来支持多个http同时请求。Chrome浏览器最多允许对同一个域名Host建立6个TCP连接,不同的浏览器有所区别。补充如果图片都是HTTPS的连接,并且在同一域名下,浏览器会先和服务器协商使用 HTTP2 的 Multiplexing 功能进行多路传输,不过未必所有的挂在这个域名下的资源都会使用同一个TCP连接。如果用不了HTTPS或者HTTP2(HTTP2是在HTTPS上实现的),那么浏览器会就在同一个host建立多个TCP连接,每一个TCP连接进行顺序请求资源。参考:[1]. 第8题-浏览器HTTP请求并发数和TCP连接的关系
      TCP连接相关

      客户端连接服务器失败怎么办?

      客户端通过终端(终端有下载的软件,包括浏览器也属于终端),通过一个端口,连接到服务器指定的端口。服务器会监听这个端口,如何有这个端口的应用访问,则和终端用户交互,从而达到客户端连接服务器的作用。
      不知道你的服务器是租赁,还是自己的,如果是租赁或者托管服务器,直接找他们技术人员帮你解决就好了,现在服务器租赁商技术人员都是提供7*24小时服务的,很方便,如果需要我可以帮你推荐,希望可以帮到你,望采纳
      客户端连接服务器失败怎么办?

      为什么我写的modbus tcp通信协议服务器一断,在起来连不上客户端

      可能是你没有处理好关闭连接,服务器程序如果出错退出,或者退出时没进行断开客户端的操作,会造成客户端不知道服务器已停止工作,而继续保持虚连接,造成重连失效。 建议完善服务器程序设计,在服务器退出前,增加关闭所有客户端连接,并收回socket的操作。
      为什么我写的modbus tcp通信协议服务器一断,在起来连不上客户端

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

          热门文章

          文章分类