Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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
我的TCP套接字服务器未发送和接收_C - Fatal编程技术网

我的TCP套接字服务器未发送和接收

我的TCP套接字服务器未发送和接收,c,C,我试图为客户端编写一个TCP套接字服务器,然后遇到了一些问题。服务器未发送/接收数据。但是,它可以倾听并接受新客户 我尝试了“NC127.0.0.1-L10001”来测试客户机,效果很好。服务器一次只能发送和接收编码字符。我做了一些修改,从那以后我一直看到错误 退出消息可以在custom.h中声明时进行注释或删除 任何想法都将不胜感激 #include <stdio.h> #include <stdlib.h> #include <string.h> #in

我试图为客户端编写一个TCP套接字服务器,然后遇到了一些问题。服务器未发送/接收数据。但是,它可以倾听并接受新客户

我尝试了“NC127.0.0.1-L10001”来测试客户机,效果很好。服务器一次只能发送和接收编码字符。我做了一些修改,从那以后我一直看到错误

退出消息可以在custom.h中声明时进行注释或删除

任何想法都将不胜感激

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <netinet/in.h>

#include "custom.h"

#define PORT 10001
#define MAXIMUM_CONNECTION 20
#define DATA_SIZE 100

int main() 
{
    int sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    struct sockaddr_in serverAddr, clientAddr;
    memset(&serverAddr, '\0', sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(PORT);
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);

    if(bind(sock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) {
        exitMessage("Failed to address to port");
    }

    if(listen(sock, MAXIMUM_CONNECTION) < 0) {
        exitMessage("Server is deaf could not listen to incoming messages");    
    }

    char buffer[DATA_SIZE], data[DATA_SIZE];

    while(1) {
        memset(buffer, '\0', DATA_SIZE);
        memset(data, '\0', DATA_SIZE);

        socklen_t clientAddrSize = sizeof(clientAddr);

        if(accept(sock, (struct sockaddr *) &clientAddr, &clientAddrSize) < 0) {
            exitMessage("Could not accept new connections");
        }

        if(recv(sock, buffer, DATA_SIZE - 1, 0) < 0) {
            exitMessage("Failed to receive data from client");      
        }

        printf("\nReceived: \'%s\' to client\n", buffer);
        printf("input data for client: ");

        int index = 0;
        while((data[index++] = getchar()) != '\n');

        if(send(sock, data, strlen(data), 0) < 0) {
            exitMessage("Failed sending to client");
        }
    }
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“custom.h”
#定义端口10001
#定义最大\u连接20
#定义数据大小为100
int main()
{
int sock=socket(PF_INET、sock_STREAM、IPPROTO_TCP);
serverAddr、clientAddr中的结构sockaddr\u;
memset(&serverAddr,'\0',sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sinu端口=htons(端口);
serverAddr.sin\u addr.s\u addr=htonl(INADDR\u ANY);
if(bind(sock,(struct sockaddr*)&serverAddr,sizeof(serverAddr))<0{
exitMessage(“无法寻址到端口”);
}
如果(侦听(sock,最大\u连接)<0){
exitMessage(“服务器失聪,无法侦听传入消息”);
}
字符缓冲区[数据大小],数据[数据大小];
而(1){
memset(缓冲区“\0”,数据大小);
memset(数据“\0”,数据大小);
socklen\u t clientaddress size=sizeof(clientAddr);
if(接受(sock,(struct sockaddr*)&clientAddr,&clientaddsize)<0){
exitMessage(“无法接受新连接”);
}
if(recv(sock,buffer,DATA_SIZE-1,0)<0){
exitMessage(“无法从客户端接收数据”);
}
printf(“\n收到:\'%s\'到客户端,\n”,缓冲区);
printf(“客户端的输入数据:”);
int指数=0;
而((数据[index++]=getchar())!='\n');
if(发送(sock,data,strlen(data),0)<0){
exitMessage(“发送到客户端失败”);
}
}
}

您侦听的套接字仅用于接受新连接,而不是读取/写入数据。
accept
函数返回已接受套接字的文件描述符。这就是您应该在上调用的
recv
send

int newsock;
if((newsock = accept(sock, (struct sockaddr *) &clientAddr, &clientAddrSize)) < 0) {
    exitMessage("Could not accept new connections");
}

if(recv(newsock, buffer, DATA_SIZE - 1, 0) < 0) {
    exitMessage("Failed to receive data from client");      
}

printf("\nReceived: \'%s\' to client\n", buffer);
printf("input data for client: ");

int index = 0;
while((data[index++] = getchar()) != '\n');

if(send(newsock, data, strlen(data), 0) < 0) {
    exitMessage("Failed sending to client");
}
intnewsock;
if((newsock=accept(sock,(struct sockaddr*)&clientAddr,&clientaddsize))<0){
exitMessage(“无法接受新连接”);
}
if(recv(newsock,buffer,DATA_SIZE-1,0)<0){
exitMessage(“无法从客户端接收数据”);
}
printf(“\n收到:\'%s\'到客户端,\n”,缓冲区);
printf(“客户端的输入数据:”);
int指数=0;
而((数据[index++]=getchar())!='\n');
如果(发送(新闻组,数据,字符串(数据),0)<0){
exitMessage(“发送到客户端失败”);
}

OT:关于:
int sock=socket(PF\u INET、sock\u STREAM、IPPROTO\u TCP)1)袜子的正确类型是
sock\t
,而不是
int
。2) 始终检查返回值以确保操作成功。建议:
sock\u t sock;如果((sock=socket(PF_INET,sock_STREAM,IPPROTO_TCP)<0){perror(“socket failed”);exit(exit_faile)}
如何声明
端口
以及声明的值是什么?OT:关于:
侦听(sock,最大连接)
该参数:
MAXIMUM_CONNECTION
不是关于可以连接多少个客户端,而是关于可以在队列中等待多少个客户端,等待轮到他们连接。当包含自制头文件时,将其内容作为问题/代码的一部分发布。否则,我们只能猜测其内容。顺便说一句:unless正在尝试“内联”函数:
exitMessage()
它不应该在头文件中关于:从那时起,我一直看到错误。什么错误?编译错误或通信错误或???