REUSEADDR,服务器连接多个客户端,点对点聊天程序

1. REUSEADDR


服务器端尽可能使用REUSEADDR 选项
在绑定地址端口之前尽可能调用setsocktopt()来设置REUSEADDR套接字选项

使用了REUSEADDR选项后,可以使得不必等待TIME_WAIT状态消失就可以重启服务器

//设置REUSEADDR 选项
    int on = 1;
    run = setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
    if(run < 0)
    {
  	printf("error setsokopt \n");
        return -5;
    }  


 
2.服务器连接多个客户端
 

使用多进程进行处理,用子进程处理链接
                   父进程继续处理accept();从完成链接队列中再获取一个
服务器端有两个套接字,一个已连接套接口,主要是用来通信的
                     一个监听调节口,主要实现三次握手的过程

客户端只有一个套接字,链接套接字

//服务器端函数
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>

void do_service(int conn)
{
    //实现回射通信
    char recvbuf[1024];
    while(1)
    {   
        memset(recvbuf,0,sizeof(recvbuf));
	int ret=0;
	//接受客户端的请求,read()失败返回-1
        ret = read(conn,recvbuf,sizeof(recvbuf)); //返回实际接受到的字节数
        if(ret == 0)  //说明客户端关闭了
        {
            printf("client close \n");
            break;
        }
        else if(ret == -1) //-1表示失败了
        {
           printf("error read() \n");
           break;
        }

	//对请求进行处理
	printf("%s",recvbuf);
	//对客户端进行数据应答
        write(conn,recvbuf,ret);
    }
}
int main()
{
    int listenfd;
    int run;
	
    //首先调用socket()函数创建套接字
    listenfd =socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); //在LINUX 下可以用man socket 查询该函数的具体描述
    if(listenfd < 0)
    {
	printf("ERROR\n");
	return -1;
    }
    struct sockaddr_in servaddr;           //IPV4的地址结构
    m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值