今天调试了一上午的socket通讯,终于连接成功了,代码都是照抄刘同学的。我的客户端程序和服务器程序连接之后,接收数据出现问题,报错:Error: socket receive error!。开始以为是send和recv函数第二、三个参数有问题,原型
ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);
ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);
更改数次之后,仍然有问题,于是又在网上搜了一下别人的代码,终于发现是服务器端的这两个函数的第一个参数有问题。服务器端定义了两个文件描述符,int sock_fd = -1, client_fd = -1;调用accept函数时返回的client_fd 文件描述符连接到调用connect的客服端。传给accept的原始套接字没有关联到这个连接,而是继续保持可用状态并接受其他连接请求。accept函数原型int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);
我的服务器代码如下:
int sock_fd = -1, client_fd = -1;
/** create socket **/
int create_socket(){
int ret = 0;
struct sockaddr_in addr, client_addr;
socklen_t length = sizeof(client_addr);
printf("Info: start create socket!\n");
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == sock_fd){