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