C++ Socket(二)

来源:互联网 发布:vba 窗体输入数据回调 编辑:程序博客网 时间:2024/05/29 16:53

服务器实例

#include <iostream>#include<sstream>using namespace std;#ifdef __cplusplusextern "C" {#endif#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include <arpa/inet.h>#include <unistd.h>#ifdef __cplusplus}#endif#ifndef MYSOCKET_PORT#define MYSOCKET_PORT 8888#endif#ifndef MYSOCKET_LISTEN_LENG#define MYSOCKET_LISTEN_LENG 2#endifvoid proccess_coon_server(int sc);int main(){    int err;    int ss;    ss=socket(AF_INET,SOCK_STREAM,0);    if(ss<0){        cout<<"socket create error"<<endl;        return -1;    }    sockaddr_in my_server_addar;    bzero(&my_server_addar,sizeof(my_server_addar));    my_server_addar.sin_family=AF_INET;    my_server_addar.sin_addr.s_addr=htonl(INADDR_ANY);    my_server_addar.sin_port=htons(MYSOCKET_PORT);    err=bind(ss,(sockaddr*)&my_server_addar,sizeof(my_server_addar));    if(err<0){        cout<<"bind error"<<endl;        return -1;    }    err=listen(ss,MYSOCKET_LISTEN_LENG);    if(err<0){        cout<<"listen error"<<endl;        return -1;    }    sockaddr_in my_client_addar;    socklen_t addrlen;    int sc;    pid_t pid;    while (true) {        addrlen=sizeof(sockaddr);        sc=accept(ss,(sockaddr*)&my_client_addar,&addrlen);        if(sc<0){            continue;        }        pid=fork();        if(pid==0){            cout<<"start sub proc"<<pid<<endl;            close(ss);            proccess_coon_server(sc);        }else{            close(sc);        }    }}void proccess_coon_server(int sc){    ssize_t size=0;    char buff[1024];    ostringstream os_str;    string result;    while (true) {        bzero(buff,sizeof(char)*1024);        size=read(sc,buff,1024);        if(size==0){            return;        }        cout<<"from client:"<<buff<<endl;        os_str.str("");        os_str<<"this is reply for \""<<buff<<"\"";        result=os_str.str();        write(sc,result.c_str(),result.length()+1);    }}

客户端实例

#include <iostream>using namespace std;#ifdef __cplusplusextern "C" {#endif#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include <arpa/inet.h>#include <unistd.h>#ifdef __cplusplus}#endif#ifndef MYSOCKET_PORT#define MYSOCKET_PORT 8888#endifvoid process_conn_client(int cs);int main(){    sockaddr_in server_addr;    int err;    int cs=socket(AF_INET,SOCK_STREAM,0);    if(cs<0){        cout<<"bind error"<<endl;        return -1;    }    sockaddr_in server_addar;    bzero(&server_addar,sizeof(server_addar));    server_addar.sin_family=AF_INET;    server_addar.sin_addr.s_addr=htonl(INADDR_ANY);    server_addar.sin_port=htons(MYSOCKET_PORT);    connect(cs,(sockaddr*)&server_addar,sizeof(server_addar));    process_conn_client(cs);}void process_conn_client(int cs){    string str_in;    int out_size;    char out_data[1024];    while (true) {        cin>>str_in;        write(cs,str_in.c_str(),str_in.length());        bzero(out_data,sizeof(char)*1024);        out_size=read(cs,out_data,1024);        cout<<"from server:"<<out_data<<endl;    }}