【发布时间】:2017-07-09 19:27:07
【问题描述】:
所以我正在尝试用线程实现一个基本的客户端-服务器计算器。我能够使用套接字实现客户端服务器之间的通信,但是当我尝试向代码中添加线程时我不知所措。 这是我第一次使用这个论坛,所以如果我提出一个愚蠢的问题,请抱歉,但我已经搜索了一些答案,但我找不到任何有帮助的东西:( 我现在可以上传我的整个代码位,我认为这就足够了:
在 main 中创建一个线程:
while(cliente_socket_fd = accept(socket_fd,(struct sockaddr*)&name_cliente,(socklen_t*)&cliente_name_len))
{
pthread_t thread;
new_sock = malloc(1);
*new_sock = cliente_socket_fd;
if(i <= nThreads) // nThreads is the maximum of threads permitted
{
if(pthread_create(&thread, NULL, connectionSocket, (void*)new_sock) < 0)
{
perror("Error");
return 1;
}
i++;
}
}
从创建线程接收信息的函数:
void *connectionSocket(void *sockR)
{
int sock = *(int*)sockR;
int x;
char buffer[1024];
do{
x = strlen(buffer) + 1;
read(sock,buffer, x);
readSocket(sock, buffer);
}while(1 || strcmp(buffer,"end") != 0);
close(sock);
return 0;
}
服务器读取套接字函数:
int readSocket(int sock, const char* buffer)
{
//char buffer[1024];
//char message[1024] ;
int ssize;
ssize = strlen(buffer);
if(ssize == 0)
return 0;
char* message = (char*) malloc(ssize);
//memset(buffer, 0, sizeof buffer);
memset(message, 0, sizeof message);
strcat(message, buffer);
...
writeSocket(sock, message);
...
写入套接字的函数:
void writeSocket(int sock, const char* mensagem)
{
int ssize = strlen(message) + 1;
write(sock, &ssize, sizeof(ssize));
write(sock, message, ssize);
}
再次抱歉,如果我是菜鸟或要求太多,但非常感谢任何帮助。谢谢。
【问题讨论】:
-
这里的实际问题是什么?
-
一件事:'while(cliente_socket_fd = accept());'为什么那句话是真的?
-
哦.. 和'new_sock = malloc(1);' - 不够大。
-
'readSocket()' 不读取套接字。
-
您需要使用调试器检查所有代码。您有太多严重的错误和太多缺失/误导性的代码/数据,我们无能为力。
标签: c multithreading sockets