linux下面基本的网络编程,收不到数据
服务端程序为:
- C/C++ code
#include <stdlib.h>#include <stdio.h>#include <sys/socket.h>#include <linux/in.h>int main(){ int svsk,clsk; struct sockaddr_in myaddr; char buff[8]; if((svsk=socket(AF_INET,SOCK_STREAM,0))<0){ printf("socket error\n"); exit(0); } bzero(&myaddr,sizeof(myaddr)); myaddr.sin_family=AF_INET; myaddr.sin_port=htons(10086); myaddr.sin_addr.s_addr=INADDR_ANY; if(bind(svsk,(struct sockaddr *)&myaddr,sizeof(myaddr))<0){ printf("bind error\n"); exit(0); } if(listen(svsk,5)<0){ printf("listen error\n"); exit(0); } printf("Accepting connections ...\n"); while(1){ if(clsk=accept(svsk,NULL,NULL)<0){ printf("accept error\n"); exit(0); } printf("connected!\n"); // if(send(clsk,"server",7,0)<0) // printf("write error\n"); if(read(clsk,buff,7)<0) printf("read error\n"); puts(buff); close(clsk); } close(svsk); return 0;}客户端为:
- C/C++ code
#include <stdlib.h>#include <stdio.h>#include <sys/socket.h>#include <linux/in.h>int main(){ int clsk; struct sockaddr_in svaddr; char buff[8]; if((clsk=socket(AF_INET,SOCK_STREAM,0))<0){ printf("socket error\n"); exit(0); } bzero(&svaddr,sizeof(svaddr)); svaddr.sin_family=AF_INET; svaddr.sin_port=htons(10086); svaddr.sin_addr.s_addr=inet_addr("127.0.0.1"); if(connect(clsk,(struct sockaddr *)&svaddr,sizeof(svaddr))<0){ printf("connect error\n"); exit(0); } printf("connected!\n"); if(write(clsk,"client",7)<0) printf("write error\n");// if(recv(clsk,buff,7,0)<0)// printf("read error\n"); close(clsk); return 0;}执行时双方都显示已连接,客户端显示发送成功,但是服务端没有任何输出,似乎是卡死在read那里了,怎么回事?
[解决办法]
if(clsk=accept(svsk,NULL,NULL)<0){
加括号
if((clsk=accept(svsk,NULL,NULL))<0){