Tag: 套接字

为什么服务器在客户端应用程序处于STOPPED状态后等待客户端?

这个问题是对此前提出的问题 的扩展 : 我用以下参数实现了jxh给出的解决方案 : SO_KEEPALIVE = Enabled TCP_KEEPIDLE = 120 secs TCP_KEEPINTVL = 75 secs TCP_KEEPCNT = 1 那为什么服务器仍然等待客户端响应? 我也在互联网上发现了这一点 kill 实际上将SIGTERM发送到给定进程。 所以我在“杀死”telnet应用程序后使用了ps -o pid,cmd,state命令。 我看到telnet进程仍然存在,但process state = T ,即它处于STOPPED状态 PS:我对Linux信号知之甚少,请考虑一下。

使用套接字通过Tcp / IP发送消息

我试图在客户端/服务器之间发送数据,数据看起来像 typedef Struct Message { int id; int message_length; char* message_str; }message; 我试图在客户端和服务器之间Write和Read此消息,不断更新此结构中的元素。 我听说过Writev可能会做到这一点。 我想向服务器发送一条消息然后服务器拉出元素并使用这些元素作为条件来执行正确的方法?

C:具有超时的非阻塞套接字:如何检查是否发出了连接请求?

我希望有一台服务器一次连接到一个客户端,在连接到给定客户端时忽略连接请求。 我还希望避免服务器在侦听第一个客户端时被锁定,以便程序可以干净地终止。 显然,套接字可以是非阻塞的: http : //beej.us/guide/bgnet/output/html/singlepage/bgnet.html#blocking 我相应地创建了我的套接字(为清楚起见,删除了错误管理 int sockfd; struct sockaddr_in self; sockfd = socket(AF_INET, SOCK_STREAM, 0)); fcntl(sockfd, F_SETFL, O_NONBLOCK); // making this socket non blocking bzero(&self, sizeof(self)); self.sin_family = AF_INET; self.sin_port = htons(port); self.sin_addr.s_addr = inet_addr(“127.0.0.1”); // allowing connection from localhost only. bind(sockfd, (struct sockaddr*)&self, sizeof(self)); 从那时起,我不确定如何管理超时。 以下代码不起作用,但提供了我想要实现的内容。 int client_found = 0; while ( […]

套接字选择失败并且正在进行操作 – 非阻塞模式

我们的应用程序使用非阻塞套接字使用连接和选择操作(c代码)。 pusedo代码如下 unsigned int ConnectToServer(struct sockaddr_in *pSelfAddr,struct sockaddr_in *pDestAddr) { int sktConnect = -1; sktConnect = socket(AF_INET,SOCK_STREAM,0); if(sktConnect == INVALID_SOCKET) return -1; fcntl(sktConnect,F_SETFL,fcntl(sktConnect,F_GETFL) | O_NONBLOCK); if(pSelfAddr != 0) { if(bind(sktConnect,(const struct sockaddr*)(void *)pSelfAddr,sizeof(*pSelfAddr)) != 0) { closesocket(sktConnect); return -1; } } errno = 0; int nRc = connect(sktConnect,(const struct sockaddr*)(void *)pDestAddr, sizeof(*pDestAddr)); if(nrC != -1) […]

(GET HTTP Request)使用winsock.h的C ++套接字

好的,在任何人得出结论之前(并且确实与我保持相关性),基本上,我正在尝试使用Winsock.h 在C / C ++中使用套接字创建Get Request 。 [ 运行SocketRequest函数时存在的主要问题 ] 我一直在从任何地方获得错误响应代码:“WSAENOTCONN 10057”到“WSAENOTSOCK 10038”,我在这里找到了更多相关信息: https ://msdn.microsoft.com/en-us/library/windows/desktop/ ms740668(v = vs.85)的.aspx 现在,这将与其他人无关,但更多的是我的情况。 我正在尝试使用“winsockx.h”在XBOX360 Devkit上实现它,当我创建“SocketRequest”时崩溃…这里是用于调试目的的代码WITH输出。 (我知道这通常不是你所看到的,所以按照你想要的方式) 这是包含的文件: #include “stdafx.h” #include #include “Hooks.h” #include #include #include #include #include #include #include 这是定义和实例: int Socket; struct sockaddr_in SocketAddress; char bufferReturn[10000]; char serverAddr[2000]; bool returnTEST = false; char *Request1; char *Request2; char *ResetRequest; […]

UDP – 以块的forms从队列中读取数据

我正在使用UDP(在C中)实现一个小应用程序。 服务器以给定数量的块(例如100字节/调用)向客户端发送来自给定文件的数据。 客户端下载文件并将其保存在某处。 问题是客户端可以接收一个参数,说明要读取/调用多少字节。 我的问题是当服务器发送100字节/调用,并且客户端设置为只读15字节/调用。 其他85个字节丢失,因为消息已从UDP队列中删除。 有没有办法在块中读取这些消息而不将它们从队列中删除,直到它们被完全读取?

在C中将字节转换为uint32

我不断通过TCP / IP将LabVIEW的像素值数组(uint32)发送到C程序。 我正在使用Ws2_32.lib中的recv函数来接收字节,但我必须将它们转换回uint32数据类型,并且在这种情况下并不真正知道如何操作。 如果有人知道如何做,我会感激不尽。 提前致谢 #define DEFAULT_BUFLEN 256 #include #include #pragma comment(lib,”ws2_32.lib”) //Winsock Library int main(int argc , char *argv[]) { WSADATA wsa; SOCKET s , new_socket; struct sockaddr_in server , client; int c; typedef unsigned char bytes[256]; typedef unsigned int uint32_t; int iResult; char recvbuf[DEFAULT_BUFLEN]; int recvbuflen = DEFAULT_BUFLEN; printf(“\nInitialising Winsock…”); if (WSAStartup(MAKEWORD(2,2),&wsa) […]

通过TCP发送int数组时,为什么只有第一个数量正确?

按照我之前的问题( 为什么我从TCP套接字读取整数数组时会得到奇怪的结果? ),我提出了以下代码,这似乎有用。 代码示例适用于少量数组元素,但一旦变大,数据就会在最后被破坏。 这是通过TCP发送int数组的代码: #define ARRAY_LEN 262144 long *sourceArrayPointer = getSourceArray(); long sourceArray[ARRAY_LEN]; for (int i = 0; i < ARRAY_LEN; i++) { sourceArray[i] = sourceArrayPointer[i]; } int result = send(clientSocketFD, sourceArray, sizeof(long) * ARRAY_LEN); 这是接收int数组的代码: #define ARRAY_LEN 262144 long targetArray[ARRAY_LEN]; int result = read(socketFD, targetArray, sizeof(long) * ARRAY_LEN); 前几个数字很好,但在数组的下方,数字开始变得完全不同。 最后,当数字看起来像这样: 0 0 0 […]

冒泡在c中动态创建结构数组

在这里真的很新,很抱歉任何进一步的错误..我有一些新的学校项目(学习C),我必须使用套接字连接到服务器,而不是从服务器下载所有代码行。 在那之后,我需要对行进行排序,使它们按顺序排列,我得到的就是排序……好吧我已经下载了代码行,将它们保存在struct array中但是现在我的冒泡排序显示了一些错误给了我而我没有知道什么是问题.. thx任何帮助。 typedef struct DATA{ char* buf; }DATA; // this fucntion creates a socket. void sort_array(DATA *to_sort, int len){ int i, j; char tmp[1024] = “”; for (i = 0; i < len – 1; i++){ for (j = 0; j < len – i – 1; j++){ if (strcmp(to_sort[j].buf, to_sort[j + 1].buf) […]

在C中使用fork()和TCP连接进行设计

关于如何设计以下系统,我有一个问题: 我的系统由几个听取环境的客户构建。 当违反音频阈值时,他们将信息发送到服务器,该服务器让孩子们监听每个连接。 服务器需要来自所有客户端的信息以进行必要的计算。 目前,服务器在UNIX中工作,并且已经分叉连接。 他们是独立工作的。 我想要做的是告诉父母(在服务器中)已经发送了信息,现在是时候处理它了。 我该怎么办 ? 我正在考虑可能的不同方法: 在Unix中使用signal()以某种方式告诉父母发生了什么 转换为线程并使用一些等待和通知function 信号是优选的,但我无法弄清楚如何有效地做到这一点。 因为我的系统中可能发生以下情况: 如果所有客户端成功地将信息发送给他们的服务器的子女,我怎样才能告诉父母我已经准备好了? 不知道/我不确定它将如何处理它们。 服务器可能无法从所有客户端接收信息。 因此,父母必须等待所有孩子一段时间,但不要太久。 所以我猜某种计时器?