tcp服务端和客户端交互

来源:互联网 发布:baocms源码 编辑:程序博客网 时间:2024/04/29 02:57
客户端#include<iostream>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<strings.h>#include<cstdlib>#include<errno.h>#include<stdio.h>#include<string.h>#define LISTENQ 1024#define SERV_PORT 9877#define MAXLINE 1000using namespace std;void str_cli(FILE *fp,int sockfd){int m;cout<<"str_cli success"<<endl;char sendline[MAXLINE],recvline[MAXLINE];while(fgets(sendline,MAXLINE,fp)!=NULL){cout<<"while success"<<endl;        m=write(sockfd,sendline,strlen(sendline));if(read(sockfd,recvline,MAXLINE)==0)cout<<"err_quit";fputs(recvline,stdout);}}int main(int argc,char **argv){int sockfd;struct sockaddr_in servaddr;if(argc !=2)cout<<"usage:li<IP>"<<endl;sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(SERV_PORT);inet_pton(AF_INET,argv[1],&servaddr.sin_addr);connect(sockfd,(struct sockaddr* )&servaddr,sizeof(servaddr));str_cli(stdin,sockfd);exit(0);return 0;}

服务端#include<iostream>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>//#include<strings.h>#include<cstring>#include<cstdlib>#include<errno.h>#include<string>#define LISTENQ 1024#define SERV_PORT 9877#define MAXLINE 1000using namespace std;void str_echo(int sockfd){size_t n;char buf[MAXLINE];again:while((n=read(sockfd,buf,MAXLINE))>0){write(sockfd,buf,n);if(n<0&&errno==EINTR)goto again;else if (n<0)cout<<"str_echo:read error"<<endl;}string str;cout<<buf<<endl;}int main(){int listenfd,connfd,mark;pid_t childpid;socklen_t clilen;struct sockaddr_in cliaddr,servaddr;listenfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));//功能是servaddr前n个字符为0;servaddr.sin_family=AF_INET;// servaddr.sin_addr.s_addr=htons(SERV_PORT); servaddr.sin_port=htons(SERV_PORT);// inet_pton(AF_INET,argv[1],&servaddr.sin_addr);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));mark=listen(listenfd,LISTENQ);char stt[48];cout<<servaddr.sin_addr.s_addr<<endl;struct in_addr myaddr;myaddr.s_addr=9877;inet_ntop(AF_INET,&(myaddr.s_addr),stt,48);cout<<"stt"<<stt<<endl; cout<<"hello world "<<listenfd<<" "<<mark<<endl;// for(;;) while(true){cout<<"hello world h"<<endl;clilen=sizeof(cliaddr);cout<<"clilen"<<clilen<<endl;cout<<cliaddr.sin_addr.s_addr<<endl;inet_ntop(AF_INET,&(cliaddr.sin_addr.s_addr),stt,48);cout<<stt<<endl;connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);cout<<"connfd"<<connfd<<endl;if((childpid=fork())==0){close(listenfd);cout<<"hello world ";str_echo(connfd);//exit(0);}close(connfd);}cout<<listenfd<<endl; return 0;}