小编iro*_*wer的帖子

使用数据报的并发服务器

客户端必须向服务器发送 2 个字符串,服务器必须向客户端发回一个字符串,并且并行处理客户端。这两个实体在 Unix 下使用数据报交换数据。我的问题是,当我使用线程时,我无法将数据发送回客户端,也无法读取数据。此外,即使我不使用线程,我也无法将消息正确发送回客户端。

\n\n

服务器是:

\n\n
#include <sys/socket.h>\n#include <netinet/in.h>\n#include <pthread.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdint.h>\n#include <signal.h>\n#include <unistd.h>\n#include <stdlib.h>\n\n\nint sd = 0;\nvoid* worker(void* argm) {\n    struct sockaddr_in* adress = (struct sockaddr_in*) argm;\n    char s[100],s2[100];\n    int adressLen;\n\n    recvfrom(sd, s, sizeof(s), 0, (struct sockaddr*) &adress, &adressLen);\n    perror("recv");\n
Run Code Online (Sandbox Code Playgroud)\n\n

Perror显示recv:非套接字上的套接字操作

\n\n
    printf("I received: %s\\n",s);\n\n    strcat(s2,"sample");\n    s2[strlen(s2)]=\'\\0\';\n    sendto(sd, &s2, sizeof(s2),  0, (struct sockaddr*) &adress,sizeof(adress));\n    perror("send");\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后perror()显示发送:非套接字上的套接字操作。\n这也会导致客户端无限等待来自服务器的字符串。

\n\n
int main(int argc, char* argv[]) {\n    int sd;\n    int servPort;\n\n    struct sockaddr_in servAddr;  \n\n    if …
Run Code Online (Sandbox Code Playgroud)

c pthreads datagram unix-socket

3
推荐指数
1
解决办法
4429
查看次数

标签 统计

c ×1

datagram ×1

pthreads ×1

unix-socket ×1