Tag: 套接字

在从端口6343捕获sflow数据时,UDP报头长度字段始终为零

我试图从端口6343捕获UDP sflow数据。我试图捕获UDP头信息,它提供源端口,目标端口,UDP头长度和校验和。 我能够看到端口捕获,但UDP和校验和字段分别为0和1,这意味着不计算UDP长度,也不计算校验和。 我在这里遗漏了UDP标头长度和校验和计算的内容吗? 以下是我使用的代码: #include //For standard things #include //malloc #include //memset #include //Provides declarations for icmp header #include //Provides declarations for udp header #include //Provides declarations for tcp header #include //Provides declarations for ip header #include #include #define PORT 6343 #define PCKT_LEN 65536 void handlepacket(unsigned char *, int); int sockt; int i,j; struct […]

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 – strcmp中的字符串

我在比较C中的字符串时遇到了麻烦(我很擅长)。 我在此服务器应用程序上有套接字等待接受来自客户端的数据。 在我程序的这个特定部分,我希望能够根据从客户端收到的数据执行MySQL查询。 我希望能够知道接收到的数据何时具有“newuser”的值以启动简单的注册过程。 Strcmp返回一个正值1,我相信我应该得到一个0,因为值应该相等。 源代码: //setup socket //loop and select structure to handle multiple connections if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) { // got error or connection closed by client if (nbytes == 0) { // connection closed printf("selectserver: socket %d hung up\n", i); } else { perror("recv"); } close(i); […]

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

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

udp连接套接字上的ICMP“目标不可达”数据包

我用这个函数创建了连接的UDP套接字 /* Creates connected udp socket */ int udp_connect( const char *host, const char *serv) { int sockfd, n; struct addrinfo hints, *res, *ressave; bzero(&hints, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ( ( n = getaddrinfo( host, serv, &hints, &res)) != 0) err_quit( “udp_connect error for %s, %s: %s”, host, serv, gai_strerror(n)); […]

套接字超时:它有效,但为什么以及如何,主要是select()函数?

这是我现在使用的代码的一部分。 fd_set fdset; struct timeval tv; int flags = fcntl(sockfd, F_GETFL); fcntl(sockfd, F_SETFL, O_NONBLOCK); connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)); FD_ZERO(&fdset); FD_SET(sockfd, &fdset); tv.tv_sec = 3; tv.tv_usec = 0; if (select(sockfd + 1, NULL, &fdset, NULL, &tv) == 1) { int so_error; socklen_t len = sizeof so_error; getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &so_error, &len); if (so_error == 0) { cout […]

C并发UDP套接字,奇怪的分段错误

我要么非常疲倦而且没有注意到一些简单的事情,或者这完全是在与我联系。 我遇到了一个分段错误(核心转储),我已经设法将它精确定位到worker函数中的sendto()。 (在服务器中) 服务器代码: //UDPServer.c /* * gcc -o server UDPServer.c * ./server */ #include #include #include #include #include #include #include #include void err(char *str) { perror(str); exit(1); } int sock; typedef struct { struct sockaddr_in client; int buffsize; char *msg; } data; void *worker (void* asd) { int len; FILE *fp; data d; d […]

C中的基本套接字编程

所以我遇到了一个奇怪的问题,我在我的程序中遇到的基本上是C中的客户端/服务器套接字编程示例。我已经花时间远离问题,但我似乎找不到导致问题的原因。 如果需要,我可以发布更多细节,但以下是不起作用的。 while(1) { char word[256]; gets(word); printf(“%s”,word); if(strcmp(word, “TRANSLATE”) == 0 || strcmp(word, “GET”) == 0 ||strcmp(word, “STORE”) == 0 || strcmp(word, “EXIT”) == 0) { if(strcmp(word, “TRANSLATE”) == 0) { if(send(sock , word , strlen(word) , 0)<0) { printf("Send Error\n"); return 1; } bzero(server_reply,2000); if(recv(sock , server_reply , 2000 , 0)<0) { puts("Recieving […]

STDIN和Incoming Socket上的select()

我正在尝试用C编写一个非常基本的聊天客户端,它使用套接字与另一台机器进行通信,而我在理解select时遇到了一些问题。 这是相关代码的快速片段。 while(1) { FD_ZERO(&readfds); FD_ZERO(&writefds); FD_SET(STDIN, &writefds); FD_SET(connectFD, &readfds); select(connectFD+1, &readfds, &writefds, NULL, NULL); if(FD_ISSET(connectFD, &readfds) != 0) { char buf[1024]; memset(buf, 0, sizeof(buf)); int lastBit; lastBit = recv(connectFD, buf, sizeof(buf), 0); if (lastBit > 0 && lastBit < 1024) { buf[lastBit] = '\0'; } else { close(connectFD); break; } printf("%s\n", buf); } else […]

C程序 – 如何检查Web服务是否正在运行

我正在使用套接字调用来调用Web服务。 我想阻止我的客户端应用程序“挂起”,直到套接字调用超时(如果服务未运行)。 如果服务正在运行,该应用程序正常工作。 即使服务未运行,create socked和connect也会成功。 那么,需要包含哪个头库? //Create the Socket sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd error, “E991”, ERROR_SIZE); return; }; printf(“errno %d: %s\n”,errno,strerror(errno)); printf(“sockfd %d: %s\n”,sockfd,”socket call”); //Connect errno=0; connresult = connect(sockfd,(struct sockaddr *)&server_addr, sizeof(server_addr)); if (connresult error, “E992”, ERROR_SIZE); return; } printf(“errno %d: %s\n”,errno,strerror(errno)); printf(“connresult %d: %s\n”,connresult,”connection call”); // check if service is […]