Server Develop (一) 简单的TCP/IP C/S

简介:
复制代码
//server.h
#include "utl.h" class server{ public: server(const short port); ~server(); int initServer(); void startListen(); //循环accept,可以通过继承来增加多线程 private: struct sockaddr_in server_addr; int sock_serv; };
复制代码
复制代码
//server.cc
#include "server.h" #include "utl.h" server::server( const short port) { memset( &server_addr, 0, sizeof(server_addr) ); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_addr.sin_addr.s_addr = htonl( INADDR_ANY ); } server::~server() { close(sock_serv); } int server::initServer() { sock_serv = socket(AF_INET, SOCK_STREAM, 0); if(sock_serv < 0){ perror("socket error!\n"); return -1; } int on = 1; setsockopt( sock_serv, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ); int flag = bind(sock_serv, (struct sockaddr*)&server_addr, sizeof(server_addr)); if(flag < 0){ perror("bind error!\n"); close(sock_serv); return -1; } return 0; } void server::startListen() { int flag = listen(sock_serv, 5); if(flag < 0){ perror("listen error!\n"); close(sock_serv); return; } char buffer[1024]; while(1){ bzero(buffer,sizeof(buffer)); struct sockaddr_in client_addr; int size = sizeof(client_addr); int sock_client = accept(sock_serv, (struct sockaddr*)(&client_addr), (unsigned int*)(&size)); if(sock_client < 0){ perror("accept error!\n"); continue; } strcpy(buffer, "this is server! welcome!\n"); send(sock_client, buffer, 1024, 0); bzero(buffer,sizeof(buffer)); flag = recv(sock_client, buffer, 1024, 0); if(flag < 0){ perror("recv error!\n"); close(sock_serv); return; } printf("recv : %s\n",buffer); while(1){ bzero(buffer,sizeof(buffer)); flag = recv(sock_client, buffer, 1024, 0); if(flag < 0){ perror("recv error!\n"); close(sock_serv); return; } printf("i have recv buffer\n"); printf("recv : %s\n",buffer); if(strcmp(buffer,"quit") == 0){ printf("quit!!!\n"); break; } } } }
复制代码

 

复制代码
//client.cc
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <unistd.h>
#include <iostream>
using namespace std;


int main(int argc, char** argv)
{
    int sock_client;
    struct sockaddr_in server_addr;

    sock_client = socket(AF_INET, SOCK_STREAM, 0);
    if(sock_client < 0 ){
        perror("socket error!\n");
        return -1;
    }

    bzero(&server_addr, sizeof(struct sockaddr_in));
    server_addr.sin_family         = AF_INET;
    server_addr.sin_port           = htons(8000);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    int flag;
    flag = connect(sock_client,(struct sockaddr*)(&server_addr), sizeof(struct sockaddr));
    if(flag < 0){
        perror("connect error!\n");
        close(sock_client);
        return -1;
    }

    printf("connect to server : OK! \n");

    char buffer[1024];


    //printf("%s\n",buffer);

    bzero(buffer,sizeof(buffer));
    recv(sock_client, buffer, 1024, 0);
    printf("recv : %s\n", buffer);

    bzero(buffer,sizeof(buffer));
    strcpy(buffer,"this is client!\n");
    send(sock_client, buffer, 1024, 0);

    while(1){
        bzero(buffer,sizeof(buffer));
        cin>>buffer;
        int p = strlen(buffer);
        buffer[p] = '\0';
        send(sock_client, buffer, 1024, 0);
        printf("i have send buffer\n");
    }

close(sock_client); return 0; }
复制代码

本文转自cococo点点博客园博客,原文链接:http://www.cnblogs.com/coder2012/archive/2013/06/11/3131541.html,如需转载请自行联系原作者

相关文章
|
6月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
100 4
|
4月前
|
网络协议 关系型数据库 MySQL
启动mysql时的异常为:[ERROR] Can‘t start server: Bind on TCP/IP port. Got error: 98: Address already in used
启动mysql时的异常为:[ERROR] Can‘t start server: Bind on TCP/IP port. Got error: 98: Address already in used
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
141 0
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
291 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
|
网络协议
TCP/IP协议族有哪些?
大家好,我是阿萨。昨天我们学习了[URI 和URL 的区别是什么?]了解了URI 和URL的区别。 学习HTTP, 绕不开TCP/IP,那么TCP/IP 协议族分为哪4层?
307 0
TCP/IP协议族有哪些?
|
网络协议 网络性能优化 网络安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
|
域名解析 网络协议 安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
|
网络协议 算法 网络性能优化
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)