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

简单的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点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2024-08-03 02:11:16

Server Develop (一) 简单的TCP/IP C/S的相关文章

Windows Server 2008系统如何配置TCP/IP

点击打开链接

SQL Server 连接问题-TCP/IP

原文:SQL Server 连接问题-TCP/IP 出自:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/24/ms-sql-server-tcp-ip.aspx TCP/IP的基本工作原理这里就不浪费口水了.现在这网络年代,谁不知道TCP/IP啊.不要跟我抬杠说你偏就没听说过TCP/IP阿,真是这样那你得自己去补补课了.   TCP/IP协议有两个基本的东西,一个是IP地址, 另一个是端口号. 在SQL Server 上使用TCP/IP协议是非常

c++-TCP/IP通信:如何制定一个好的报文协议?

问题描述 TCP/IP通信:如何制定一个好的报文协议? 我想做一个简单的TCP/IP通讯程序,客户端需要注册,登陆,登录信息有: 用户名.密码(都是必填项)和其他若干选填项(可填可不填): 我现在要注册,包含以下信息,举个例子: 用户名:wang 密码:ab12345 手机号:12345678910 这三条信息是一次性打包发送还是分三次打包发送(一条信息一个包)? (1)若是一次性打包发送,该如何打包?协议如何定比较好,请举实例说明.发给服务端后服务端又该如何解析?比如第三条信息,可以是手机号,

技术往事:改变世界的TCP/IP协议

1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难说的清楚. 本文将简要回故TCP/IP协议的过去.简单介绍TCP/IP协议族的关系,并与大家一起直观地分享由TCP/IP协议族所构建的虚拟网络与真实世界的"连接"情况. 2.TCP/IP协议简介 互联网协议族(英语:Internet Protocol Suite,缩写为IPS),是一个网络

[SQL]对于“无法用TCP/IP协议和远端SQL Server数据库连接”问题

server|数据|数据库|数据库连接|问题 对于"无法用TCP/IP协议和远端SQL Server数据库连接"问题 首先,需要确定您的SQL Server版本,以及它安装了哪些补丁,这很重要.如果补丁没有安装或者没有安装最新的ServicePack,请先安装. 然后,你可以试试看telnet SqlServerName 1433,看是否可以连接上.1433是SQl Server用TCP/IP协议的默认端口.你如果连这个端口都无法连接上,那就应该查查网络配置了. 第3,您得到的错误描述

SQL SERVER 2008 EXPRESS版本远程连接(tcp/ip)

原文 http://blog.csdn.net/zdhook/article/details/5064701 此问题折腾半天,google也搜索了,网上很多朋友一般做到第二步不成功,我也差点放弃了.最后通过第三步连接成功了. 1.防火墙允许1433 2.配置工具里的SQL Server 配置管理器.打开后,开启右边三个协议.并对tcp/ip如下配置   3.网上大部分做到第二步重启sql server服务,仍然无效.其实,需要修改连接字符串.指定我们配置的端口,还需要注意,安装时采用window

windows 2003 server R2中TCP/IP筛选

对于个人用户来说,您可以限制所有的端口,因为您根本不必让 您的机器对外提供任何服务 如果要阻止所有TCP 流量,请单击仅允许,但不要在TCP 端口 列中添加任何端口号. "TCP/IP 筛选"只能筛选入站流量. 此功能不影响出站流量,也不影响为接受来自出站请求的响应而创建的响应端口.

TCP/IP模型的一个简单解释

TCP/IP模型是互联网的基础. 想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大悟的感觉,第一次感到自己理解了互联网的总体架构. 下面,我按照自己的理解,写一下互联网到底是怎么搭建起来的.说得不对的地方,欢迎指正. 什么是TCP/IP模型? TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换. 所谓"协议"可以理解成机器之间交谈

TCP/IP模型的简单解释

TCP/IP模型是互联网的基础.想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大悟的感觉,第一次感到自己理解了互联网的总体架构. 下面,我按照自己的理解,写一下互联网到底是怎么搭建起来的.说得不对的地方,欢迎指正.   什么是TCP/IP模型? TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换. 所谓"协议"可以理解成机器之间交