practice0422:build a TCP server

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#define PORT 6267
#define IP "192.168.124.179"
int main(int argc, const char *argv[])
{
    //创建流式套接字文件
    int sfd=socket(AF_INET,SOCK_STREAM,0);
    if(sfd<0)
    {
        fprintf(stderr,"----line:%d----",__LINE__);
        perror("socket");
        return -1;
    }
    printf("创建流式套接字文件成功\n");
    //运行端口号被重复使用
    int reuse = 1;
if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
{
    fprintf(stderr, "line:%d  ", __LINE__);
    perror("setsockopt");
    return -1;

}
    //绑定服务器自身地址信息,必须!
struct sockaddr_in sin;
    //服务器地址信息结构体
    sin.sin_family =AF_INET;
    sin.sin_port  =htons(PORT);
    sin.sin_addr.s_addr=inet_addr(IP);
    //开始绑定
    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)

    {
        fprintf(stderr,"---line:%d----",__LINE__);
        perror("bind");
        return -1;
    }
    printf("bind OK ---%d---\n",__LINE__);
    //讲套接字设置位被动监听状态
    if(listen(sfd,128)<0)
    {
        fprintf(stderr,"---line:%d--",__LINE__);
        perror("listen");
        return -1;
    }
    printf("listen OK ----%d---",__LINE__);

    struct sockaddr_in cin;
    socklen_t addrlen=sizeof(sin);
    int newfd=accept(sfd,(struct sockaddr*)&cin,&addrlen);
    if(newfd <0)
    {
        fprintf(stderr,"line:%d",__LINE__);
        perror("accept");
        return -1;
    }
    printf("accept OK,newfd=%d---%d--\n",newfd,__LINE__);
    char buf[128];
    ssize_t res;
    while(1)
    {
        bzero(buf,sizeof(buf));
        res=recv(newfd,buf,sizeof(buf),0);
        if(res<0)
        {
            fprintf(stderr,"line:%d",__LINE__);
            perror("recv");
            return -1;
        }
        else if (0==res)
        {
            printf("客户端下线--%d--\n",__LINE__);
            break;
        }
        printf("newfd=%d:%s   ---%d---",newfd,buf,__LINE__);
    }


    close(newfd);                                                                           
    close(sfd);
    return 0;

    //获取链接成功的套接字
    //发送 接受  关闭文件描述符
    //
    return 0;
}
                                                                                            
                                                                                            

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值