Tag: tcp

套接字客户端使用Select

我试图实现一个客户端function,可以使用select()函数建立与多个服务器的连接。 但我不是使用select()函数的专家。 但是,我的客户端可以启用与多个服务器的连接,但它无法从这些多个服务器读取消息。 根据我的以下示例,我将我的客户端连接到两台服务器( 192.168.100.136, 192.168.100.138) 。 与这两台服务器连接后,我的客户端只从一台服务器( 192.168.100.136 )接收消息,而不是从多台服务器接收消息。 我不确定我在示例程序中使用select()函数的方式。 请更正我的示例应用程序以获得所需的o / p ..提前致谢 int main() { int port = 10001 ; char ip[][32] = {“192.168.100.136″,”192.168.100.138”}; int count = 2 ; int ret = clientSelect(ip,port,count); return 0 ; } int clientSelect(char **ipAddr ,int port , int count) { SOCKET max_sd = 0; SOCKET socketId[10] […]

使用select()监听多个客户端(TCP)

我开发了(TCP)服务器来监听客户端并与之交互。 现在我正在尝试调整该服务器代码以收听多个客户端。 我想使用select,但我对我发现的一些例子和解释感到困惑。 我一直在阅读: http : //support.sas.com/documentation/onlinedoc/sasc/doc750/html/lr2/select.htm和http://support.sas.com/documentation/onlinedoc/sasc/doc750/html /lr2/select.htm这两个都被推荐给我..:S 第一个网站的例子似乎不太复杂..(虽然仍然不知道如何使其适应我的代码,因为我非常非常非常新的网络等)但我担心我错过了关键方面,因为第二个网站的例子的复杂性。 下面是我的服务器代码的快照,当只监听一个客户端时(包括一些伪代码以最小化不那么重要的东西): int main(int argc, char *argv[]) { int sockfd, newsockfd, portno, clilen; char buffer[3]; struct sockaddr_in serv_addr, cli_addr; int n; if (argc < 2) { fprintf(stderr,"ERROR, no port provided\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0){error("ERROR opening socket");} bzero((char *) &serv_addr, sizeof(serv_addr)); […]

是否存在可用于在POSIX程序中计算TCP段校验和的预先存在的函数或代码

我正在写一个小POSIX程序,我需要计算TCP段的校验和,我想使用现有的函数,以避免自己写一个。 像(伪代码)的东西: char *data = …. u16_integer = computeChecksum(data); 我在网上搜索但我找不到正确的答案,有什么建议吗?

在Linux / Mac / Windows上,是否可以在连接的TCP套接字的用户空间中访问TCP时间戳和/或RTT?

在Linux / Mac / Windows上,是否可以在连接的TCP套接字的用户空间中访问TCP时间戳和/或RTT? 我指的是RFC 1323启用的TCP时间戳和相关的RTT计算。 显然,我可以使用原始套接字,但套接字既不会连接也不能在Windows上发送TCP数据包(我相信XP Update 3之后)。

TCP客户端 – 服务器“错误地址”错误(在C中)

虽然它似乎正确实现, 但是当我使用环回地址 (127.0.0.1) 建立连接时 , 它会继续返回ERROR 。 除了简单的TCP客户端/服务器连接外,我还添加了一个案例: 如果客户端尝试发送数据但发现连接已关闭 ,则它也会关闭。 我通过检查接收的数据是否等于0(recv)来执行它。 给定错误 : CLIENT: Welcome to the Client mode Please, enter the Server’s IP Address and Port (eg. 192.128.192.0 1320) 127.0.0.1 2700 Connected to the server. Now you can send messages Please, enter a message. Enter “FINISH” if you want to finish the connection ECHO […]

C中的服务器接受UDP和TCP连接

我有个问题。 我一直在用C开发一个可以接受UDP和TCP客户端连接的服务器。 所以我需要知道什么时候连接是UDP,什么时候是TCP。 我已经分别开发了两种情况,它们都可以正常工作。 我一直在寻找如何做到这一点,一切都指向select()函数,但我不知道如何使用它来解决这个问题。 任何人都可以告诉我一个接受udp和tcp连接的例子或事情……我真的迷失了。 非常感谢你…

关于Arduino上TCP的问题

我正在试验我的Arduino Leonardo和一个简单的C套接字服务器。 C部分必须向Arduino发送一个字符串,但我无法连接到arduino(套接字初始化后C函数被阻塞,无法连接到Arduino)。 C函数代码是: #include #include #pragma comment(lib, “ws2_32.lib”) //Winsock Library int connect() { WSADATA wsa; SOCKET s; struct sockaddr_in server; char* message; printf(“\nInitialising Winsock…”); if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { printf(“Failed. Error Code : %d”, WSAGetLastError()); return 1; } printf(“Initialised.\n”); //Create a socket if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { printf(“Could […]

Recv有时只提供错误的文件描述符(运行程序它工作正常,有时它不起作用)

场景:我有一个客户端(订阅者),其中包含编译和工作的代码,我有所说客户端的服务器,我可以在不同的bash窗口运行它,我有printf来显示我正在发送什么消息,服务器得到了什么,看看客户是否收到确认……一切。 在代码的某些地方可能存在问题但是它或多或少有效,因为我可以发送消息等(这都在本地机器上)。 我停止程序运行,再次执行,并且可能发生两件事:它正常工作,我可以再次发送任何消息,或者当我尝试从客户端发送到服务器时,服务器关闭并且客户也是如此,没有收到确认。 我想解释一下,如果没有我编译或做任何事情,就会发生这种情况。 启动程序,再次运行,有时会失败。 我到目前为止唯一的事情(因为我对每次使用的电话都感到恐惧)是: RECV错误:文件描述符错误 我得到了这段代码: if((longitudRecibida=recv(fdSocketDevuelto, &longitudTema, sizeof(int), 0)) < 0){ close(sock_tcp); perror("RECV error"); exit(1); } 我没有放更多代码的原因是因为我根本不知道如何重现失败。 有时它工作正常,没有任何一点它停止,有时我发送的第一个消息使两个进程都失败。 当发生这种情况时,当我打印客户端的IP地址,而不是我得到的通常的127.0.0.1时,我得到: Peer IP address: 2385:6095:e37f:: 为了得到那个打印我使用: char ipstr[INET6_ADDRSTRLEN]; if (addr.ss_family == AF_INET) { struct sockaddr_in *s = (struct sockaddr_in *)&addr; port = ntohs(s->sin_port); inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr); } else { // AF_INET6 struct […]

NtDeviceIoControlFile – 获取缓冲区的大小

我使用IOCTL_TCP_QUERY_INFORMATION_EX控制代码调用NtDeviceIoControlFile ,但在执行实际调用之前,我需要获取输出缓冲区的大小,以便为其分配适当的大小。 这是我的代码: TCP_REQUEST_QUERY_INFORMATION_EX TcpRequestQuery; IO_STATUS_BLOCK StatusBlock; DWORD BufferSize = sizeof(TDIENTITYID) * 4096; memset(&TcpRequestQuery, 0, sizeof(TcpRequestQuery)); TcpRequestQuery.ID.toi_class = 0x100; TcpRequestQuery.ID.toi_type = 0x100; TcpRequestQuery.ID.toi_id = 0; TcpRequestQuery.ID.toi_entity.tei_entity = 0; TcpRequestQuery.ID.toi_entity.tei_instance = 0; *EntityList = (TDIENTITYID *) GlobalAlloc (GMEM_ZEROINIT, BufferSize); NTSTATUS Status = NtDeviceIoControlFile( TcpFile, NULL, NULL, NULL, &IOBlock, IOCTL_TCP_QUERY_INFORMATION_EX, &TcpQueryInfo, sizeof(TcpQueryInfo), *EntityList, BufferSize); if (!NT_SUCCESS(Status)) return […]

Mac OS X:内核扩展获得TCP连接的tcpcb结构如何?

我想提供一个用户空间函数,通过实现内核扩展来获取TCP连接统计信息。 从检查TCP源代码,我看到tcpcp结构包含这样的统计信息。 在给定来自用户空间的套接字句柄的情况下,如何通过内核扩展获取关联的tcpcb结构并将统计信息返回给用户空间?