gpt4 book ai didi

java - C中的TCP服务器,Socket仍然为负

转载 作者:行者123 更新时间:2023-11-30 21:02:54 25 4
gpt4 key购买 nike

嗨,我正在尝试运行简单的服务器客户端游戏。服务器是用C语言编写的,客户端是用java编写的(这是学校项目,我无法改变它)。我的客户端是 Windows 7 64 位,服务器在 Virtualbox(Debian 32 位)上运行,我通过 WiFi 使用桥接连接。我试图简单地接受新连接并使用 TCP 和套接字为其创建新线程。

当我比较 client_socket 是否 > 0 时,就可以了,客户端已连接。但是当我在 if block 中放入一些代码(下面代码中的注释部分)时,套接字为 -1 并且无法连接(它甚至没有到达代码)。不管它是什么代码,即使它是 int x = 0 它仍然无法工作。看来只有 printf() 可以。感谢您的任何回复。

perror() 打印“无效参数”。

这是我的 C 服务器代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>


void *serve_request(void *arg){

printf("Thread is running.\n");
}


int start_server (void){
int server_socket;
int client_socket;
int return_value;
char cbuf;
int *th_socket;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
socklen_t client_addr_len;
pthread_t thread_id;;

server_socket = socket(AF_INET, SOCK_STREAM, 0);

if (server_socket < 0) return -1;

memset(&server_addr, 0, sizeof(struct sockaddr_in));

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(10001);
server_addr.sin_addr.s_addr = INADDR_ANY;

return_value = bind(server_socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in));

if (return_value == 0)
printf("Bind OK\n");
else{
printf("Bind Error\n");
return -1;
}

return_value = listen(server_socket, 5);
if (return_value == 0)
printf("Listen OK\n");
else{
printf("Listen Error\n");
return -1;
}


while(1){

client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len);

printf("Socket number: %d\n", client_socket);

if (client_socket >= 0 ) {

printf("Socket OK\n");

// #### PROBLEM PART ####
//th_socket=malloc(sizeof(int));
//*th_socket=client_sock;

//thread_id = 0;
//pthread_create(&thread_id, NULL, (void *)&serve_request, (void *)th_socket);

} else {
printf("Socket Error\n");
return -1;
}

}

return 0;
}

最佳答案

您需要将 client_addr_len 初始化为 client_addr 结构的大小。 accept 函数使用该参数来确定传递哪种类型的地址结构。

您现在拥有的是 undefined behavior因为未初始化的(非静态)局部变量具有不确定的值(未初始化的非静态变量的内容看起来是随机的)。

关于java - C中的TCP服务器,Socket仍然为负,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27542629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com