TCP网络编程流程

套接字

struct
sockaddr{ //通用套接字数据结构

sa_family_t
sa_family; //协议族

char
sa_data[14]; //协议族数据

}

实际使用sockaddr_in,在bind时或connect时再强行转换

struct
sockaddr_in{ //以太网套接字数据结构

u8
sin_len;

u8
sin_familly;

u16
sin_port;

struct
in_addr
sin_addr;

char
sin_zero[8];

}

服务器端:socket()->bind()->listen()->accept()->read()->write()->close()

客户端
:socket()->connect()->write()->read()->close()

socket()创建套接字,返回文件描述符

原型:int
socket(int domain,int type,int protocol);

domain设置通信的域,指定协议族


PF_UNIX,PF_LOCAL


本地通信


PF_INET


IPv4
Internet协议


PF_INET6


IPv6
Internet协议


PF_IPX


PF_NETLINK


内核用户界面设备


PF_X25


PF_AX25


PF_ATMPVC


PF_APPLETALK


PF_PACKET


底层包访问

type的值和含义


SOCK_STREAM


TCP连接


SOCK_DGRAM


UDP


SOCK_SEQPACKET


序列化包


SOCK_RAW


提供原始网络协议访问


SOCK_RDM


提供可靠的数据报文类型,但可能数据会有乱序


SOCK_PACKET


专用类型,从设备驱动接受数据

protocol指定某个协议的特定类型,

bind()绑定一个地址端口

原型:int
bind(int sockfd,const struct sockaddr *my_addr,socklen_t addrlen);

listen()监听本地端口

原型:int
listen(int sockfd,int backlog);

backlog表示在accept处理之前等待队列中的客户端的长度。

accept()

原型:int
accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

addr传的是个指针,返回后得到指向客户端的地址的指针。

connect()

原型:int
connect(int sockfd,struct sockaddr *,int addrlen);

write()

read()

close()

shutdown()

原型:int
shutdown(int s,int how)

允许更多方式关闭套接字


SHUT_RD


切断读


SHUT_WR


切断写


SHUT_RDWR


切断读写,和close()一样

信号:

当尝试写时,如果服务端已关闭,则得到一个SIGPIPE信号,并终止进程

时间: 2024-10-28 14:59:53

TCP网络编程流程的相关文章

Java - TCP网络编程

Java - TCP网络编程 Server 逻辑思路: 创建ServerSocket(port),然后服务器的socket就启动了 循环中调用accept(),此方法会堵塞程序,直到发现用户请求,返回用户的socket 利用多线程对用户socket进行IO操作 注意:对Scoket/File进行创建.关闭,都需要放try catch中,检测 IOException,所以将网络IO部分整体放入try catch中即可. 1. 字符串操作 输出:PrintWriter out=new PrintWr

Linux下TCP网络编程与基于Windows下C#socket编程间通信

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clos

Linux下TCP网络编程与基于Windows下C#socket编程之间通信

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入 数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clo

JAVA学习之TCP网络编程,Socket使用

ServerSocket 此类实现服务器套接字. ServerSocket常用的构造方法有以下几个, ServerSocket() 创建非绑定服务器套接字. ServerSocket(int port) 创建绑定到特定端口的服务器套接字. ServerSocket(int port, int backlog) 利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号. ServerSocket(int port, int backlog, InetAddress bindAddr

Java笔记二十四.TCP网络编程

 TCP网络编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 从上面一节内容可以知道,利用UDP通信的两个程序是平等的,无主次之分,两个程序代码可以完全一样.但利用TCP协议进行通信的两个应用程序,是有主从之分的,一个称为服务器程序,另外一个称为客户机程序.Java中提供了ServerSocket类用于创建服务器端的socket,Socket类用于创建客户端socket. 一.APIs简介 java.net.ServerSocket (1

戏说TCP网络编程

1.何为TCP? ?? ???既然说到TCP协议网络编程,那么首先来了解下什么是TCP协议.TCP协议的全称叫Transmission Control Protocol 传输控制协议,是一种面向连接的.可靠的.基于字节流的传输层通信协议.在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上.? ?? ???面向连接是什么呢?面向连接可以理解为指定对象,就好像平时打电话一样,你要打电话需要电话号码,也就是需要指定打电话的对象:可靠就简单了,就是在传输的过程中

TCP网络编程中connect()、listen()和accept()三者之间的关系

基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看<浅谈 TCP 三次握手>),最后把连接的结果返回给这个函数的返回值(成功连接为0, 失败为-1). 通常的情况,客户端的 c

TCP网络编程杂谈

作为一名IT工程师,网络通信编程相信都会接触到,比如Web开发的HTTP库,Java中的Netty,或者C/C++中的Libevent,Libev等第三方通信库,甚至是直接使用Socket API,但是很多程序员都仅限于使用,对于使用的方式是否合理并没有特别深的理解,比如有一股脑的使用线程池解决问题的(虽然大部分情况采用多线程方案不会有什么问题,但是编程复杂度比起单线程提升了很多,线程开的太多也会导致切换过于频繁,性能未必有太大提升),也有始终用一条线程处理所有业务的,然后上线之后经常出现各种服

TCP网络编程学习小结

TCP协议是TCP/IP协议族中的一个十分重要的名字(看到TCP/IP这个名字就知道TCP有多重要了),同时也是一个十分复杂的协议,在使用这个协议的时候可能会带来很多问题,这使得使用的程序员会十分头大.如果想了解TCP协议的细节,可以参考<TCP/IP详解1:协议>.闲话不多说,我们进入正题: 一.报文头 首先我们来看一下TCP协议的报文头: TCP是传输层协议,其报文头并不包含TP地址,IP地址会在IP层添加,当然,IP层处于TCP的下层,IP层的报文内容就是TCP报文. TCP/IP协议网