linux c++ socket入门之tcp server端

来源:互联网 发布:网络赚钱入门必读pdf 编辑:程序博客网 时间:2024/05/24 02:02

tcp_server.h

#include <unistd.h>#include <iostream>#include <sys/socket.h>#include <arpa/inet.h>#define MAXSIZE 1024class tcp_server{private:        int socket_fd,accept_fd;        sockaddr_in myserver;        sockaddr_in remote_addr;public:        tcp_server(int listen_port);        int recv_msg();};


tcp_server.cpp

#include "tcp_server.h"tcp_server::tcp_server(int listen_port) {        if(( socket_fd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0 ){                throw "socket() failed";        }        memset(&myserver,0,sizeof(myserver));        myserver.sin_family = AF_INET;        myserver.sin_addr.s_addr = htonl(INADDR_ANY);        myserver.sin_port = htons(listen_port);        if( bind(socket_fd,(sockaddr*) &myserver,sizeof(myserver)) < 0 ) {                throw "bind() failed";        }        if( listen(socket_fd,10) < 0 ) {                throw "listen() failed";        }}int tcp_server::recv_msg() {        while( 1 ) {                socklen_t sin_size = sizeof(struct sockaddr_in);                if(( accept_fd = accept(socket_fd,(struct sockaddr*) &remote_addr,&sin_size)) == -1 )                {                        throw "Accept error!";                        continue;                }                printf("Received a connection from %s\n",(char*) inet_ntoa(remote_addr.sin_addr));                if( !fork() ) {                        char buffer[MAXSIZE];                        memset(buffer,0,MAXSIZE);                        if( ( read(accept_fd,buffer,MAXSIZE)) < 0 ) {                                throw("Read() error!");                        } else {                                printf("Received message: %s\n",buffer);                                break;                        }                        exit(0);                }                close(accept_fd);        }        return 0;}


main.cpp

#include <iostream>#include <tcp_server.h>int main(int argc,char* argv[]){        tcp_server ts(atoi(argv[1]));        ts.recv_msg();        return 0;}

 

编译
g++ -c tcp_server.cpp -o tcp_server.og++ -g tcp_server.o main.cpp -I. -o main


 运行

./main 9527


客户端测试

telnet server_ip 9527


服务器端响应

client(IP:192.168.99.1) connected.