C ++中的简单客户端服务器程序不起作用
simple client sever program in c++ not working
我正在尝试用c ++创建一个简单的客户端服务器程序。服务器和客户端执行直到终止,但数据不会在服务器之间传输到客户端。我的服务器代码是:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
int main(void) {
int sid=socket(AF_INET,SOCK_STREAM,0);
int clilen;
int clisocket;
char buffer[256];
int portnumber=atoi("8888");
struct sockaddr_in serverinfo,cliinfo;
memset(&serverinfo, '0', sizeof(serverinfo));
memset(&cliinfo, '0', sizeof(cliinfo));
serverinfo.sin_family=AF_INET;
serverinfo.sin_port=htons(portnumber);
serverinfo.sin_addr.s_addr=INADDR_ANY;
bind(sid,(struct sockaddr *)&serverinfo,sizeof(serverinfo));
listen(sid,1000);
clilen=sizeof(clilen);
clisocket=accept(sid,(struct sockaddr*)&cliinfo,(socklen_t*)clilen);
bzero(buffer,256);
printf("before server n");
write(clisocket,"hello",5);
printf("after server n");
close(clisocket);
close(sid);
return 0;
}
我的客户端代码是:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
int main(void) {
char buffer[256];
bzero(buffer,256);
int cid=socket(AF_INET,SOCK_STREAM,0);
int port=atoi("8888");
struct sockaddr_in serverinfo;
memset(&serverinfo, '0', sizeof(serverinfo));
struct hostent* host;
memset(&host, '0', sizeof(host));
host=gethostbyname("localhost");
serverinfo.sin_family=host->h_addrtype;
memcpy((char *) &serverinfo.sin_addr.s_addr, host->h_addr_list[0], host->h_length);
serverinfo.sin_port=htons(port);
int statusconnect=connect(cid,(sockaddr*)&serverinfo,sizeof(serverinfo));
printf("before read client n");
read(cid,buffer,255);
printf("after client read");
printf(buffer); //not print this!!!
printf(buffer);
close(cid);
return 0;
}
我将不胜感激任何帮助。
您缺少所有错误处理。当出现问题时,您不知道为什么或如何解决它。始终检查错误情况。
在这种特殊情况下,问题似乎出在服务器中的accept
调用上:您将套接字长度作为最后一个参数传递,而您应该传递指向套接字长度的指针。此外,套接字长度最初设置为int
的大小。代码应为:
clilen = sizeof(struct sockaddr_in);
clisocket = accept(sid,(struct sockaddr*)&cliinfo,(socklen_t*)&clilen);
一个更微妙的错误是服务器关闭套接字,不保证是否实际发送了任何数据。 不过,解决此问题更为复杂。
相关文章:
- 使用嵌入式猫鼬服务器托管应用程序
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- C++服务器程序循环打印
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- 绑定 API 在服务器程序中究竟做了什么
- TCP 客户端服务器程序
- 如何避免在C 11服务器程序中为多个客户端使用多个线程
- 客户端无法连接到LAN中的服务器程序
- 套接字 TCP 服务器程序问题
- UDP客户端-服务器程序使用gcc而不是g++进行编译
- C ++中的简单客户端服务器程序不起作用
- Zeromq如何制作一个允许它不等待客户端请求的C ++服务器程序
- 使用CSocket连接到服务器程序
- 用C++编写服务器程序
- 在linux中使用命名管道的简单客户端/服务器程序
- 编写一个多TCP服务器程序
- 服务器程序处于无限循环中.如何检查它
- 在c++windows中进行客户端-服务器程序设计的多线程
- 对于客户端服务器程序,并行接收多个客户端连接请求的最佳方法是什么
- 如何在dev ++上运行客户端服务器程序