连接的TCP重置

D

dperez79

Guest
大家好,

我有一个背后的TCP套接字连接到路由器的SCADA服务器遥控站。

连接是正确的,但有些时候关闭连接。

我闻闻净
, 我找到一个与复位位= 1(TCP级的TCP消息),发送的远程站点或路由器(我不知道)前夕的SCADA服务器,关闭连接。

什么是此复位讯息的原因?

谢谢。丹尼尔体育

 
关机()函数..请参考:::

报价:http://www.sendspace.com/file/n89qt6

Addison.Wesley.TCPIP.Illustrated第1卷

 
谢谢,

我能找到这个消息的原因复位的控制站发送。

它是由已收到了远动规约内自由行动的性质。

现在,我怎么能解决这个问题?

的TCP会忽视这个EOF字符。

谢谢。

 
你正在使用
1。二进制模式的连接
2。是否可以转换为ASCII。
3。你能写的协议。然后改变了EOF字符其他..

 
EOF字符时
, 收到那么read函数返回马鲛。

我程序是这样:

bytesRead =读(clisock,缓冲区,BUF_SIZE);
如果(bytesRead“0)(
/ *世韩leído datos * /

否则(
/ *坦托州市上课塞罗Ø较少乌诺cerramos报
插座* /
)如果我改变这样:

bytesRead =读(clisock,缓冲区,BUF_SIZE);
如果(bytesRead“= 0)(
/ *世韩leído datos * /

否则(
/ *坦托州市上课塞罗Ø较少乌诺cerramos报
插座* /
)我可以读EOF字符时
, 是在协议的数据
, 包括数据。
我不能改变的协议。

 
我怎么能知道所有的TCP参数/ IP协议的执行这两个系统都(客户机/服务器?。

服务器是SOLARIS版8 SO和客户端是一个遥控站。

 
报价:国际专利分类:套接字插座提供点对点点,两个两个进程之间的双向通信。
插座的用途很广,是一种进程间及系统间通信的基本组成部分。
套接字是一个通信的名称可以绑定端点。
它有一个类型和一个或多个相关进程。套接字存在于通信领域。
套接字域是一个抽象的解决提供了一个结构和一组协议。
插座只连接在同一域套接字。
插座23个领域确定(见程序开发区),其中只有UNIX和互联网域名,一般都使用Solaris 2.x上插座可用于进程间通信在一个系统,像其他形式的IPC 。Unix域提供了一个系统一个套接字地址空间。
UNIX域套接字的命名与UNIX路径。
插座也可用于进程间通信在不同的系统。
连接的系统之间的接口地址空间被称为互联网域名。互联网域名通讯使用TCP / IP互联网协议族。插座类型定义的通信性能可见的应用程序。
进程之间的通信只同一类型的插座。
有五种类型的插座。流套接字

-提供双向测序,可靠,无重复记录的,没有边界的数据流。
阿流的运行如同一个电话交谈。
套接字类型是SOCK_STREAM,这在互联网域名,使用传输控制协议(TCP)。

数据报套接字

-支持双向信息流动。
数据报套接字上甲可能会在从该消息被送往不同的顺序的序列信息。
数据记录中的边界将被保留。
数据报套接字操作,就像在邮件传递信件来回。
套接字类型为SOCK_DGRAM,这在互联网域名,使用用户数据报协议(UDP)。

一个连续的数据包套接字

-提供了一种双向,测序,可靠,固定连接的数据报的最大长度。
套接字类型SOCK_SEQPACKET。
没有因为这是任何类型的协议家族执行协议。

原始套接字

提供访问底层通信协议。这些插座通常是面向数据报,但其确切的特点,就议定书规定的接口而定。套接字的创建和命名廉政插座(工业生产领域,int类型,廉政协议)被调用来创建一个指定域套接字和指定类型。
如果协议没有指定,系统默认为一个协议,支持指定套接字类型。
套接字句柄(描述符)返回。
远程进程已无法确定,直到套接字地址绑定到它。
沟通流程连接通过地址。
在UNIX域,连接通常是由一个或两个路径名称。
在互联网域名,组成一个连接本地和远程地址和本地及远程端口。
在大多数领域,连接必须是唯一的。廉政约束(廉政秒,const结构struct sockaddr *名称,廉政namelen)被称为绑定路径或Internet地址到套接字。
有三种不同的方法来调用bind(),取决于套接字的领域。*对于含有14或更少的字符路径UNIX域套接字,您可以:#包括程序开发区

...

绑定(海峡,(结构struct sockaddr *)&地址,长度);*如果一个UNIX域套接字的路径,需要更多的字符,请使用:#包括<sys/un.h>

...

绑定(海峡,(结构sockaddr_un *)&地址,长度);*对于Internet域套接字,使用#包括<netinet/in.h>

...

绑定(海峡,(结构struct sockaddr_in *)&地址,长度);在UNIX域,有约束力的名称创建一个文件系统名为插座。
使用中断()或室(),删除插座。流套接字连接连接插座通常不是对称的。
一个进程,通常是由于服务器和其他进程的行为是客户端。
服务器套接字绑定其先前商定的路径或地址。
然后阻止套接字上。
对于SOCK_STREAM套接字的服务器调用廉政听(廉政秒,廉政积压),它指定多少个连接请求,可以排队。
客户端启动一个连接到服务器的套接字通过调用为int连接(廉政秒,结构struct sockaddr *名称,廉政namelen)。
阿UNIX域调用是这样的:结构sockaddr_un服务器;

...

连接(海峡,(结构sockaddr_un *)&服务器,长度);而因特网域名的要求会:结构struct sockaddr_in;

...

连接(海峡,(结构struct sockaddr_in *)&服务器,长度);如果客户端的套接字是在连接绑定通话时间,系统会自动选择并绑定一个名字到socket。
对于SOCK_STREAM套接字,服务器调用accept(3N)的完成连接。廉政接受(廉政秒,结构struct sockaddr *地址,廉政* addrlen)返回一个新的套接字描述符,只对特定的连接有效。
服务器可以在同一时间内有多个SOCK_STREAM连接活跃。流数据传输和关闭几个函数发送和接收来自SOCK_STREAM套接字的数据。
这些都是写(),读(),廉政发送(廉政秒,const字符*味精,廉政莱昂)国际旗帜,和int函数recv(廉政秒,字符*缓冲带,廉政莱昂)国际标志。
发送()和recv()是非常相似的read()和write(),但有一些额外的业务标志。flags参数是形成了从零或多个以下位或:MSG_OOB

-发送“外的波段套接字”的数据支持这一观点。
底层协议还必须支持“出带”的数据。
只有SOCK_STREAM在AF_INET地址族支持下带数据创建套接字。

MSG_DONTROUTE

-在SO_DONTROUTE选项处于打开状态的行动时间。
它仅用于诊断或路由由亲克。

MSG_PEEK

- “皮克”在数据上的插座目前,该数据返回,但不消耗,使随后的接收操作将看到相同的数据。阿SOCK_STREAM套接字被丢弃,通过调用关闭()。数据报套接字数据报套接字并不要求建立一个连接。
每个消息的目的地址进行。
如果一个特定的本地地址是需要的,建立约束()的调用必须先于任何数据传输。
数据发送通过调用sendto()或sendmsg()。
在SendTo()调用就像是发送的目的地址还具体规定()调用。
数据报套接字接收邮件,电话recvfrom()或recvmsg()。
虽然函数recv(),需要一个缓冲的到达的数据,recvfrom()需要两个缓冲区,一个用于传入消息,另一个接收源地址。数据报套接字也可以使用连接()连接套接字到一个指定的目的地插座。
当这样做,发送()和recv()用来发送和接收数据。接受()和听()不使用数据报套接字。套接字选项

套接字有多项选择,可以通过提取getsockopt()和setsockopt()设置。
这些函数可用于在本地套接字级别(一级= SOL_SOCKET),在这种情况下,套接字选项必须指定名称。
操纵任何其他一级所需控制的利益选择协议的协议号选项必须指定(见getprotoent()在getprotobyname())。例如插座程序:socket_server.c,socket_client这两个程序演示了如何建立一个套接字连接使用上述功能。socket_server.c#包括<sys/types.h>

#包括程序开发区

#包括<sys/un.h>

#包括<stdio.h>#定义NSTRS 3 / *没有。
字符串* /

#定义地址“mysocket”/ *地址连接* // *

*字符串,我们发送到客户端。

* /

字符*可疑交易报告[NSTRS] =(

“这是从服务器的第一个字符串。\ N”的,

“这是从服务器第二个字符串。\ N”的,

“这是从服务器第三个字符串。\ N”的

);主要()



焦炭,丙型;

文件*计划生育;

廉政fromlen保存;

注册整合酶,秒,纳秒,len;

结构sockaddr_un saun,fsaun;/ *

*获取套接字工作。
这将插座

*在UNIX域,并将于1

*流套接字。

* /

如果((商S =插座(AF_UNIX,SOCK_STREAM,0))“0)(

perror(“服务器:套接字”);

出口(1);

)/ *

*创建的地址,我们将结合。

* /

saun.sun_family = AF_UNIX;

strcpy(saun.sun_path,地址);/ *

*尝试绑定地址的套接字。
我们

*断开的名称,使该不会绑定

*失败。

*

*第三个参数表示的“长度”

*结构,而不仅仅是长度

*插座的名称。

* /

断开(地址);

长度= sizeof(saun.sun_family) strlen(saun.sun_path);如果(绑定(秒,与saun,LEN)的“0)(

perror(“服务器:绑定”);

出口(1);

)/ *

*侦听套接字。

* /

如果(听(秒,5)“0)(

perror(“服务器:听”);

出口(1);

)/ *

*接受连接。
当我们接受一个,纳秒

*将连接到客户端。
fsaun会

*包含客户端地址。

* /

如果((纳秒=接受(秒,与fsaun,&fromlen保存))“0)(

perror(“服务器:接受”);

出口(1);

)/ *

*我们将使用阅读插座stdio。

* /

计划生育= fdopen(纳秒,“住宅”);/ *

*首先,我们发送一些字符串到客户端。

* /

为(1 = 0;“NSTRS,我 )

发送(纳秒,可疑交易报告[一],strlen(可疑交易报告[一]),0);/ *

*然后,我们从客户端和某些字符串

*打印出来。

* /

为(1 = 0;“NSTRS,我 )(

而((三=龟etc(计划生育))!= EOF)的(

putchar(三);如果(三=='\ ñ')

中断;



)/ *

*我们可以简单地使用接近()来终止

*方面,由于我们正在与双方共同努力。

* /

关闭(虏);出口(0);

)socket_client.c#包括<sys/types.h>

#包括程序开发区

#包括<sys/un.h>

#包括<stdio.h>#定义NSTRS 3 / *没有。
字符串* /

#定义地址“mysocket”/ *地址连接* // *

*字符串我们发送到服务器。

* /

字符*可疑交易报告[NSTRS] =(

“这是从客户端的第一个字符串。\ N”的,

“这是从客户端第二个字符串。\ N”的,

“这是从客户端第三个字符串。\ N”的

);主要()



焦炭,丙型;

文件*计划生育;

注册整合酶,秒,len;

结构sockaddr_un saun;/ *

*获取套接字工作。
这将插座

*在UNIX域,并将于1

*流套接字。

* /

如果((商S =插座(AF_UNIX,SOCK_STREAM,0))“0)(

perror(“客户端:套接字”);

出口(1);

)/ *

*创建的地址,我们将连接到。

* /

saun.sun_family = AF_UNIX;

strcpy(saun.sun_path,地址);/ *

*尝试连接到该地址。
对于这

*成功,服务器必须已经绑定

*这个地址,并且必须发出听()

*要求。

*

*第三个参数表示的“长度”

*结构,而不仅仅是长度

*插座的名称。

* /

长度= sizeof(saun.sun_family) strlen(saun.sun_path);如果(连接(秒,与saun,LEN)的“0)(

perror(“客户端:连接”);

出口(1);

)/ *

*我们将使用阅读stdio

*套接字。

* /

计划生育= fdopen(秒,“住宅”);/ *

*首先,我们看到一些字符串从服务器

*和打印出来。

* /

为(1 = 0;“NSTRS,我 )(

而((三=龟etc(计划生育))!= EOF)的(

putchar(三);如果(三=='\ ñ')

中断;



)/ *

*现在我们发送一些字符串到服务器。

* /

为(1 = 0;“NSTRS,我 )

发送(秒,可疑交易报告[一],strlen(可疑交易报告[一]),0);/ *

*我们可以简单地使用接近()来终止

*方面,由于我们正在与双方共同努力。

* /

关闭(虏);出口(0);



 
我已经做了我的socket连接窥探,我已经检查了IP层识别号码。

虽然在服务器ID号是增加了一个接一个,在遥控站ID号是增加一个随机数,通常是300或400。

难道简单的消息失去了什么?然后套接字连接的
, 它发生的原因。

我怎么能阻止这种情况在我的UNIX服务器连接误码率?

 

Welcome to EDABoard.com

Sponsor

Back
Top