自学内容网 自学内容网

【linux】TCP网络编程及Web服务器搭建

一、TCP客户端编程

1、TCP的概述

客户端:主动连接服务器、和服务器进行通信

服务器:被动被客户端连接,启动新的线程或进程 服务器客户端(并发服务器)

2、创建TCP套接字 

int sockfd = socket(AF_INET, SOCK_STREAM, 0); 

socket函数创建的TCP套接字,没有端口,默认为主动连接特性 

3、调用connect函数连接服务器

        tcp客户端通信之前 必须事先 建立和服务器的连接 

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

addr地址结构体 存放的是服务器的IP、PORT 返回值:成功为0 失败-

//连接服务器
struct sockaddr_in ser_addr;
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_port = htons(8000);
ser_addr.sin_addr.s_addr = inet_addr("10.9.11.251");
connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));

 如果sockfd没有固定端口 在调用connect时系统自动分配随机端口为源端口

4、send发送消息 

 ssize_t send(int sockfd, const void *buf, size_t len, int flags);

sockfd:套接字

buf:需要发送的字符串的首元素地址

len:需要发送的字符串的实际长度

flags:默认为0

成功返回实际发送的字节数,失败返回-1

注意:TCP并不能发送0长度报文,但是UDP可以

 5、recv接收消息(默认阻塞)

#include <sys/types.h>

#include<sys/socket.h>

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

sockfd:套接字

buf:存放收到的消息

len:最大能接收的长度

flags:默认为0  

成功返回收到的实际字节数, 失败返回-1

recv如果收到0长度报文,表明对方已经断开连接。

 close(sockfd);断开连接

6、tcp客户端 收发数据

cilent.c

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>

int main(int argc, char const *argv[])
{
    //创建TCP套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket");
        return 0;
    }
    printf("sockfd = %d\n", sockfd);

    //连接服务器
    struct sockaddr_in ser_addr;
    bzero(&ser_addr, sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_port = htons(8082);
    ser_addr.sin_addr.s_addr = inet_addr("192.168.172.179");
    connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));

    //send发送数据
    send(sockfd, "hello tcp", strlen("hello tcp"), 0);

    //recv接收数据
    unsigned char buf[1500] = "";
    int len = recv(sockfd, buf, sizeof(buf), 0);
    printf("len=%d buf=%s\n", len, buf);

    //关闭套接字
    close(sockfd);

    return 0;
}

 NetAssist充当服务器:

 二、TCP服务器编程

1、作为服务器的条件 

  1. 需要bind函数 为服务器绑定固定的端口、IP
  2. 使用listen函数 让服务器套接字 由主动变被动
  3. 等待客户端的连接到来 accept提取到来的客户端。 

 2、listen 监听函数

  • #include<sys/types.h> /* See NOTES */
  • #include<sys/socket.h>
  • int listen(int sockfd,

原文地址:https://blog.csdn.net/m0_75045191/article/details/139408183

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!