多进程多线程服务器(tcp_server)编写

编写客户/服务器

1.编写单进程客户/服务器(Version1)

  • 代码清单:
    tcp_servet
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>

static void usage(const char* proc)
{
    printf("Usage: %s [local_ip] [local_port]",proc);//提示输入出错,应该输入./tcp_servet ip地址 端口号(运行服务器)
}

int startup(const char* ip,int port)//创建套接字
{
    int sock = socket(AF_INET,SOCK_STREAM,0);//socket()创建套接字函数
    if(sock<0)
    {
        perror("socket");//提示创建套接字失败
        exit(2);
    }

//socket的返回值只是一个文件描述符,为了进行网络通信,我们还需将其与服务器 ip地址和端口号进行绑定

    struct sockaddr_in local;//结构体struct sockaddr_in是struct sockaddr的具体化
    local.sin_family = AF_INET;
    local.sin_port = htons(port);
    local.sin_addr.s_addr = inet_addr(ip);

    if(bind(sock,(struct sockaddr*) &local,sizeof(local))<0){
  //bind(绑定函数
        perror("bind");
        exit(3);
            }
//监听
    if(listen(sock,10)<0)//服务器24小时监听,等待连接请求
    {
        perror("listen");
        exit(4);
    }
    return sock;
}

//Version 1
//./tcp_servet 127.0.0.1 8080  本地环回
int main(int argc,char* argv[])
{
    if(argc!=3){
        usage(argv[0]);
        return 1;
    }

    int listen_sock = startup(argv[1],atoi(argv[2]));//create socket

    int new_sock;
    while(1){
        struct sockaddr_in client;
        socklen_t len = sizeof(client);

        new_sock = accept(listen_sock,(struct sockaddr*)&client ,&len);//accept创建新的socket,用来处理客户段请求,listen_sock只负责监听
        if(new_sock<0)
        {
            perror(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值