Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UDP客户端没有';在C语言中无法从服务器接收任何内容_C_Linux_Sockets_Udp - Fatal编程技术网

UDP客户端没有';在C语言中无法从服务器接收任何内容

UDP客户端没有';在C语言中无法从服务器接收任何内容,c,linux,sockets,udp,C,Linux,Sockets,Udp,因此,我尝试在Linux中使用UDP和C创建一个基本的服务器和客户机。服务器必须从客户端接收两个字符数组(buffer和aux),客户端必须从服务器接收一个int数组,该数组将包含aux中给定的字符在缓冲数组中的位置(例如,如果我们在aux中有aaabaa和a,则客户端必须打印01245)。问题是客户端总是打印00000 etc,这取决于frecv数组的长度 这是我的密码: //客户 #include <sys/types.h> #include <sys/socket.h&g

因此,我尝试在Linux中使用UDP和C创建一个基本的服务器和客户机。服务器必须从客户端接收两个字符数组(buffer和aux),客户端必须从服务器接收一个int数组,该数组将包含aux中给定的字符在缓冲数组中的位置(例如,如果我们在aux中有aaabaa和a,则客户端必须打印01245)。问题是客户端总是打印00000 etc,这取决于frecv数组的长度

这是我的密码:

//客户

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h> 
#include <stdint.h>

int main(int argc, char *argv[])
{

int clientSocket, portNum, nBytes1,portno,nBytes2,nBytes3,i;
int32_t frecv[1024],frecv2[1024];
char buffer[1024],aux[2];
struct sockaddr_in serverAddr;
socklen_t addr_size;
struct hostent *server1;

clientSocket = socket(PF_INET, SOCK_DGRAM, 0);
portno=atoi(argv[2]);
server1 = gethostbyname(argv[1]);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(portno);
bcopy((char *)server1->h_addr, (char *)&serverAddr.sin_addr.s_addr,server1->h_length);;
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);  

addr_size = sizeof serverAddr;

while(1)
{
    printf("Introdu un sir de caractere:\n");
    fgets(buffer,1024,stdin);
    printf("You typed: %s\n",buffer);

    printf("Introdu un caracter:\n");
    fgets(aux,2,stdin);
    printf("You typed: %s\n",buffer);
    printf("You typed: %s\n",aux);

    nBytes1 = strlen(buffer) + 1;
    nBytes2 = strlen(aux) + 1;
    sendto(clientSocket,buffer,nBytes1,0,(struct sockaddr *)&serverAddr,addr_size);
    sendto(clientSocket,aux,nBytes2,0,(struct sockaddr *)&serverAddr,addr_size);

    nBytes3 = recvfrom(clientSocket,frecv2,1024,0,(struct sockaddr *)&serverAddr,&addr_size);
    for (i = 0 ; i < nBytes3 ; i++) 
        frecv[i] = ntohl(frecv2[i]);
    for (i=0;i<nBytes3;i++)
        printf("%d",frecv[i]);
    printf("\n");
    return 0;
}


}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int clientSocket、portNum、nBytes1、portno、nBytes2、nBytes3、i;
int32_t frecv[1024],frecv2[1024];
字符缓冲区[1024],辅助[2];
serverAddr中的结构sockaddr\u;
袜子尺寸;
结构主机*server1;
clientSocket=socket(PF_INET,SOCK_DGRAM,0);
portno=atoi(argv[2]);
server1=gethostbyname(argv[1]);
serverAddr.sin_family=AF_INET;
serverAddr.sinu端口=htons(端口号);
b复制((char*)server1->h_addr,(char*)和serverAddr.sin_addr.s_addr,server1->h_length);;
memset(serverAddr.sin_zero,'\0',serverAddr.sin_zero的大小);
地址大小=服务器的大小地址;
而(1)
{
printf(“介绍某人的性格:\n”);
fgets(缓冲区,1024,标准输入);
printf(“您键入的:%s\n”,缓冲区);
printf(“导入字符:\n”);
fgets(辅助,2,标准);
printf(“您键入的:%s\n”,缓冲区);
printf(“您键入的:%s\n”,aux);
nBytes1=strlen(缓冲器)+1;
nBytes2=strlen(aux)+1;
sendto(clientSocket,buffer,nBytes1,0,(struct sockaddr*)和serverAddr,addr\u size);
发送到(客户端套接字,辅助,nBytes2,0,(结构sockaddr*)和服务器地址,地址大小);
nBytes3=recvfrom(clientSocket,frecv21024,0,(struct sockaddr*)和serverAddr,&addr\u size);
对于(i=0;i对于(i=0;i服务器响应时发送/接收的数据量,您处于关闭状态

在服务器中:

sendto(udpSocket,frecv2,j,0,(struct sockaddr *)&client,l);
您不想发送
j
字节。您想发送
j
类型
int32\t
的元素。因此需要乘以元素大小

sendto(udpSocket,frecv2,j*sizeof(frecv2[0]),0,(struct sockaddr *)&client,l);
同样,在客户机中:

for (i = 0 ; i < nBytes3 ; i++) 
    frecv[i] = ntohl(frecv2[i]);
for (i=0;i<nBytes3;i++)
    printf("%d",frecv[i]);

服务器中还有一件事。无法初始化
j
。请在循环顶部将其设置为0。

服务器响应时发送/接收的数据量已关闭

在服务器中:

sendto(udpSocket,frecv2,j,0,(struct sockaddr *)&client,l);
您不想发送
j
字节。您想发送
j
类型
int32\t
的元素。因此需要乘以元素大小

sendto(udpSocket,frecv2,j*sizeof(frecv2[0]),0,(struct sockaddr *)&client,l);
同样,在客户机中:

for (i = 0 ; i < nBytes3 ; i++) 
    frecv[i] = ntohl(frecv2[i]);
for (i=0;i<nBytes3;i++)
    printf("%d",frecv[i]);
服务器中还有一件事。无法初始化
j
。请在循环顶部将其设置为0