标签:perror tin bre return cmd mil stream null 数据
发送服务端.
//遗留问题.
1)address的拼写.
2)客户端,读完数据,会阻塞在read函数.
client
#include <iostream> #include <sys/socket.h>//{socket_type.h}:socket,AF_INET,SOCK_STREAM,PF_INET #include <netdb.h>//{<netinet/in.h>}:IPPROTO_TCP #include <sys/errno.h> #include <string.h> #include <stdio.h>//perror #include <fcntl.h> #include <unistd.h>//close. //遗留问题.address的拼写. using namespace std; int main() { //socket //address //conect int sock_client; sock_client=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sock_client<0) { cout<<"error socket()"<<endl; return -1; } //标准sockaddr是16字节,不同协议有不同结构.所以各种结构,都有要定义一个数据sin_zero,用0补满16字节. //char addr[4]={127,0,0,1}; //struct in_addr sin_addr=*((in_addr*)&addr); //‘2 0 0 13 127 0 1 1 0 0 0 0 0 0 0 0‘ struct sockaddr_in sock_addr_server; char man[16]={2,0,10,124,127,0,1,1,0,0,0,0,0,0,0,0}; sock_addr_server=*((sockaddr_in*)&man); //sock_addr_server.sin_family=AF_INET;//2byte //sock_addr_server.sin_port=htons(13);//2byte //sock_addr_server.sin_addr=sin_addr;//4byte //bzero(&sock_addr_server.sin_zero,8);//用0填充.8byte; int conn_status= connect(sock_client,(sockaddr*)&sock_addr_server,sizeof(sock_addr_server)); if(conn_status!=0) { perror("connect"); //cout<<"error connect()"<<endl; return -1; } char buf[51]; int recv_status; while(1) { recv_status= read(sock_client,buf,50); cout<<recv_status<<endl; if(recv_status==0) { break; } else if(recv_status>0) { buf[recv_status]=‘\0‘; cout<<buf<<endl; } else { perror("recv()"); break; } } close(sock_client); }
server:
#include <iostream> #include <sys/socket.h>//{socket_type.h}:socket,AF_INET,SOCK_STREAM,PF_INET #include <netdb.h>//{<netinet/in.h>}:IPPROTO_TCP #include <sys/errno.h> #include <string.h> #include <stdio.h>//perror #include <fcntl.h> #include <unistd.h>//close. #include <thread> //遗留问题.address的拼写. using namespace std; int g_cmd=0; void backfun(int sock_server); int main() { //socket //address //conect int sock_server; sock_server=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sock_server<0) { cout<<"error socket()"<<endl; return -1; } //标准sockaddr是16字节,不同协议有不同结构.所以各种结构,都有要定义一个数据sin_zero,用0补满16字节. struct sockaddr_in sock_addr_server; char man[16]= {2,0,10,124,127,0,1,1,0,0,0,0,0,0,0,0}; sock_addr_server=*((sockaddr_in*)&man); int status_bind= bind(sock_server, (sockaddr*)&sock_addr_server, sizeof(sock_addr_server)); if(status_bind==-1) { perror("bind()"); return -1; } status_bind= listen(sock_server, 10); if(status_bind==-1) { perror("listen()"); return -1; } thread bg=thread(backfun,sock_server); bg.detach(); int cmd; while(1) { cin>>cmd; if(cmd==88) { g_cmd=88; break; } } close(sock_server); } void backfun(int sock_server) { while(g_cmd!=88) { int sockfd_client= accept(sock_server,NULL,NULL); if(sockfd_client==-1) { perror("accept()"); //return -1; } else { char msg[]="hi i am server.dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd12345678904444444444444444444444444444444444444444444444441\0"; send(sockfd_client,msg,sizeof(msg),0); } } }
标签:perror tin bre return cmd mil stream null 数据
原文地址:http://www.cnblogs.com/lsfv/p/6351481.html