为什么我的C Socket客户端无法接收数据,并且错误码为104.一些代码也没有被执行



我有一个非常大的问题,我遇到了C.我写了一个C客户端程序与一个函数,应该发送和接收数据的服务器也写在C.但它抛出了一个错误。104. 下面是函数的代码:

int send_and_receive_data(struct PatientData c, int rcv)
{
//recv is supposed to determine whether data will be received from the server. it's an integer that can either be 1 or 0 
if (rcv)
{
/*create socket*/
int network_socket;
network_socket = socket(AF_INET,SOCK_STREAM,0);
//specify an address for the socket
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;
int connection_status = connect(network_socket,(struct sockaddr *) &server_address, sizeof(server_address));
// check for error with the connection
if(connection_status == -1){
printf("There was an error making a connection to the remote socketnn");
}
//send data to the server
if(send(network_socket,&c,sizeof(c),0) < 0){
puts("Send Failedn");
}
else
{
//puts("Data sentn");
}
if(recv(network_socket,&s_results,sizeof(s_results),0) < 0)
{
printf("Receive Failed %dn",errno);
printf("Sara Nakamya 2019-01-01 F Maryn");
}
else
{
// output the received data
puts("Receive successful");
printf("%s %s %s %sn",s_results.patient_name,s_results.patient_date,s_results.patient_category,s_results.patient_gender);
}
// and then close the socket
close(network_socket);
}
else
{
/*create socket*/
int network_socket;
network_socket = socket(AF_INET,SOCK_STREAM,0);
//specify an address for the socket
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;
int connection_status = connect(network_socket,(struct sockaddr *) &server_address, sizeof(server_address));
// check for error with the connection
if(connection_status == -1){
printf("There was an error making a connection to the remote socketnn");
}
//send data to the server
if(send(network_socket,&c,sizeof(c),0) < 0){
puts("Send Failedn");
}
else
{
puts("Data sentn");
}
// and then close the socket
close(network_socket);
}
return 0;
}

函数向服务器发送数据,并在同一连接上接收数据。现在我的问题是,recv()函数调用总是失败,错误码为104,即使服务器已将数据发送回客户端套接字。

下面是服务器 的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
/*
Input Data using commands
Send data to the server
The server writes the data to a text file
Database connection in C
*/

struct patient_data
{
char patient_name[256];
char patient_date[256];
char patient_category[256];
char patient_gender[10];
} s_results;
int main()
{
// create the server socket
int server_socket;
server_socket = socket(AF_INET,SOCK_STREAM,0);
// define the server address
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;
// bind the socket to our specified IP and port
bind(server_socket, (struct sockaddr*) &server_address,sizeof(server_address));
listen(server_socket,100);
int client_socket;
client_socket = accept(server_socket,NULL,NULL);    
struct data
{
int type;
char name[100];
char date_of_identificaton[20];
char category[10];
char gender[5];
} response;
// receive data from server 
recv(client_socket,&response,sizeof(response),0);
if(response.type == 1)
{
puts("Check_status");
char name[] = "Okello Ivan ELijah";
char date[] = "2019-01-01";
char category[] = "Ass";
char gender[] = "M";
strcpy(s_results.patient_name,name);
strcpy(s_results.patient_date,date);
strcpy(s_results.patient_category,category);
strcpy(s_results.patient_gender,gender);
send(server_socket,&s_results,sizeof(s_results),0);
puts("Data sentn");
printf("%sn%dn%sn",response.name,response.type,response.gender);
}
else
{
puts("Data not sent");
}
// close the socket
close(server_socket);
return 0;
}

服务器也不完全执行if语句。它只执行if else语句的第一个语句而不执行其他语句。有什么问题吗?谁来帮帮我这个忙

…即使服务器已将数据发送回客户端套接字。

实际上,您的服务器不向客户端发送数据。您可能打算在服务器中使用这一行:

send(server_socket,&s_results,sizeof(s_results),0);

仅,这是使用server_socket,这是侦听器套接字。相反,它应该使用client_socket,这是连接的套接字。注意,如果您检查send调用是否有错误,您就会意识到send也失败了。因此,最好检查所有上的错误。的地方。

最新更新