TCP套接字(server/client实现)

套接字
  • 概念:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
  • 分类:
    • 流套接字(SOCK_STREAM)
    • 数据报套接字(SOCK_DGRAM)
    • 原始套接字(SOCK_RAW)
TCP套接字(流套接字)
  • TCP套接字工作流程:
    • 首先,服务器端启动进程,调用Socket创建一个基于TCP协议的流套接字描述符。
    • 其次,服务进程调用bind命名套接字,将套接字描述符绑定到本地地址和本地端口上。
    • 再次,服务器端调用listen,开始侦听客户端的Socket连接请求。
    • 接下来,客户端创建套接字描述符,并且调用connect向服务器端提交连接请求。服务器端接收到客户端连接请求后,调用accept,接受并创建一个新的套接字描述符与客户端建立连接,然后原套接字描述符继续侦听客户端的连接请求。
    • 客户端与服务器端新套接字进行数据传输,调用write或send向对方发送数据,调用read或recv接收数据。
  • 代码
server.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<pthread.h>



static void usage(const char* proc)
{
    printf("usage: %s [local_ip] [local_port]\n",proc);
}

int start_up(const char* _ip,int _port)
{
    int sk = socket(AF_INET,SOCK_STREAM,0);
    if(sk < 0)
    {
        perror("socket");
        exit(2);
    }

    struct sockaddr_in local;
    local.sin_family = AF_INET;
    local.sin_port = htons(_port);
    local.sin_addr.s_addr = inet_addr(_ip);

    if(bind(sk,(struct sockaddr *)&local,sizeof(local)) < 0)
    {
        perror("bind");
        exit(3);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值