如何解决服务器/客户端的分段错误在哪里?
已成功编译但未运行分段错误的 bcz
- 客户端发送的数据是作为第二个客户端命令行参数提供的字符串。基本的 Echo 客户端打印 Echo 服务器发回的单串数据。基本 Echo 服务器的命令行和打印行的形式是: 编译: 服务器> gcc _EchoServer.c o _EchoServer 输出命令:Server> ./_EchoServer 服务器已启动...等待连接...
#include<stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int servsocket,nBytes,i;
char buf[1024];
struct sockaddr_in serverAddr,clientAddr;
servsocket=socket(PF_INET,SOCK_DGRAM,0);
socklen_t addrsize,clientsize;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(atoi(argv[1]));
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(servsocket,(struct sockaddr *) &serverAddr,sizeof(serverAddr));
addrsize=sizeof(clientAddr);
nBytes = recvfrom(servsocket,buf,1024,(struct sockaddr *)&clientAddr,&addrsize);
printf("%s",buf);
sendto(servsocket,strlen(buf)+1,addrsize);
close(servsocket);
return 0;
}
编译: 客户端> gcc _EchoClient.c o _EchoClient 输出命令:Client> ./_EchoClient 172.31.132.x “echo this string!!” 从服务器接收:回显这个字符串!! 172.31.132.x
//client side
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
#include<netdb.h>
int main(int argc,char *argv[])
{
int clsocket,nBytes;
char buf[1024];
struct sockaddr_in serverAddr;
socklen_t addr_size;
clsocket = socket(PF_INET,0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(atoi(argv[1]));
serverAddr.sin_addr.s_addr = inet_addr(argv[2]);
int addrsize=sizeof(serverAddr);
nBytes = strlen(argv[3]) + 1;
sendto(clsocket,argv[3],(struct sockaddr *)&serverAddr,addrsize);
recvfrom(clsocket,&addrsize);
printf("From server %s\n",buf);
close(clsocket);
}
解决方法
serverAddr.sin_port = htons(atoi(argv[1]));
serverAddr.sin_addr.s_addr = inet_addr(argv[2]);
如果检查客户端传入的参数,argv[1] = 172.31.132.x 和 argv[2] = "echo the string!!";上面两行中的 Echo Client 代码都没有指定端口和 ip。
改为输入 -
serverAddr.sin_port = htons(8080); //taking a simple example of http server
serverAddr.sin_addr.s_addr = inet_addr(argv[1]); //since argument 1 contains the IP address and not the second argument
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。