Linux网络编程--TCP网络编程基础(简单的server/client模型)

本文深入探讨了Linux环境下的TCP网络编程,包括C/S模型、服务器端和客户端的流程以及信号处理。重点讲解了socket、bind、listen、accept、read、write、connect、close等关键函数,并通过一个简单的服务器/客户端示例,帮助读者理解TCP协议的实现过程。程序分为服务器端和客户端,交互方式为客户端发送字符,服务器返回字符总数,所有代码在tcp_server.c、tcp_client.c和tcp_process.c中实现,并提供Makefile用于编译运行。
摘要由CSDN通过智能技术生成

本文主要讲解C/S模型,对服务器端和客户端的流程和函数的使用进行解析,以及网络编程中对信号的处理,特别是由于连接关闭而产生的SIGPIPE信号和终止进程而产生的SIGINT信号,当然截取信号并进行处理是程序稳定性的基本要求。
TCP网络编程中常用的函数主要有:socket(),bind(),listen(),accept(),read(),write(),connect(),close();服务器端和客户端使用不同的函数,流程的差异也是很大;其中服务器端的程序设计需要依次调用socket(),bind(),listen(),accept(),close()函数,客户端程序设计需要依次调用socket(),connect(),close()函数。那么这些函数的具体定义和使用方法就不再细讲,网上随便一搜很多很多,最好是使用官方的man手册进行查询和使用。

下面主要介绍一个简单的基于TCP协议的服务器/客户端的例子,通过本例中代码和程序构建过程的了解,学习者可以对TCP协议的服务器、客户端程序的设计方法和过程有所了解,能够进一步编写自己的程序。
功能描述:程序分为服务器端和客户端,客户端连接服务器之后从标准输入设备读取输入的字符发给服务器;服务器端收到字符串后,发送接受到的总字符数给客户端;客户端将接收到的服务端的信息打印到标准输出。框架图如下:
这里写图片描述

服务器网络程序:tcp_server.c

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>
#include <signal.h>

extern void sig_proccess(int signo);

#define PORT 8888       /* 侦听端口地址 */
#define BACKLOG 2       /* 侦听队列长度 */
int main(int argc, char *argv[])
{
    int ss,sc;      /* ss为服务器的socket描述符,sc为客户端的socket描述符 */
    struct sockaddr_in server_addr; /* 服务器地址结构 */
    struct sockaddr_in client_addr; /* 客户端地址结构 */
    int err;    /* 返回值 */
    pid_t pid;  /* 分叉的进行id */

    signal(SIGINT, sig_proccess);
    signal(SIGPIPE, sig_proccess);


    /* 建立一个流式套接字 */
    ss = socket(AF_INET, SOCK_STREAM, 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值