TCP编程的服务器端一般步骤是

1、 创建一个socket,用函数socket();

2、 设置socket属性,用函数setsockopt(); * 可选

3、 绑定IP地址、端口等信息到socket上,用函数bind();

4、 开启监听,用函数listen();

5、 接收客户端上来的连接,用函数accept();

6、 收发数据,用函数send()和recv(),者read()和write();

7、 关闭网络连接;

8、 关闭监听;

TCP编程的客户端一般步骤是:

1、 创建一个socket,用函数socket();

2、 设置socket属性,用函数setsockopt();* 可选

3、 绑定IP地址、端口等信息到socket上,用函数bind();* 可选

4、 设置要连接的对方的IP地址和端口等属性;

5、 连接服务器,用函数connect();

6、 收发数据,用函数send()和recv(),或者read()和write();

7、 关闭网络连接;

UDP编程的服务器端一般步骤是:

1、 创建一个socket,用函数socket();

2、 设置socket属性,用函数setsockopt();* 可选

3、 绑定IP地址、端口等信息到socket上,用函数bind()

4、 循环接收数据,用函数recvfrom();

5、 关闭网络连接;

UDP编程的客户端一般步骤是:

1、 创建一个socket,用函数socket();

2、 设置socket属性,用函数setsockopt();* 可选

3、 绑定IP地址、端口等信息到socket上,用函数bind();* 可选

4、 设置对方的IP地址和端口等属性;

5、 发送数据,用函数sendto();

6、 关闭网络连接;

常用的网络命令:
netstat
命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可以使用帮助

telnet
telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程序的. 比如我们的服务器程序在监听8888端口,我们可以用telnet localhost 8888来查看服务端的状况

数据结构
1、地址结构
struct sockaddr_in { 
short int sin_family; /* 地址族 一般为AF-INET */ 
unsigned short int sin_port; /* 端口号 */ 
struct in_addr sin_addr; /* IP地址 */ 
unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 使用memset()或bzero()来填充*/ 
};

struct sockaddr { 
        unsigned short sa_family; /* 地址族, AF_xxx */ 
         char sa_data[14]; /* 14 字节的协议地址 */

};

2、DNS结构
struct hostent { 
char *h_name; /* 主机的官方域名 */ 
char **h_aliases; /* 一个以NULL结尾的主机别名数组 */ 
int h_addrtype; /* 返回的地址类型,在Internet环境下为AF-INET */ 
int h_length; /*地址的字节长度 */ 
char **h_addr_list; /* 一个以0结尾的数组,包含该主机的所有地址*/ 
};

操作函数

1、 socket:

创建socket 描述符

int socket(int domain, int type, int protocol); 
domain=AF_INET,socket的类型,type=SOCK_STREAM 或SOCK_DGRAM,分别表示TCP连接和UDP连接;protocol=0。

返回一个整型socket描述符。

2.bind: 

将socket描述符与你本机上的一个端口相关联(仅用于服务器)

int bind(int sockfd,struct sockaddr *my_addr, int addrlen);

Sockfd是一个socket描述符
my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;
addrlen=sizeof(struct sockaddr)。 
返回:成功=0;失败=-1,errno=错误号。
可以用下面的赋值自动获得本机IP地址和随机获取一个没有被占用的端口号: 
my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */ 
my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */

3.Connect:

与远端服务器建立一个TCP连接 (用于客户端)
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 
Sockfd是目的服务器的sockt描述符
serv_addr是包含目的机IP地址和端口号的指针。
返回:成功=0;失败=-1,errno=错误号。

4、Listen:

监听是否有服务请求 ,用于bind()后
int listen(int sockfd, int backlog); 
Sockfd是Socket系统调用返回的socket 描述符;
backlog指定在请求队列中允许的最大请求数,缺省值为20。
返回:成功=0;失败=-1,errno=错误号。

5.accept:

接受来自客户的请求
int accept(int sockfd, void *addr, int *addrlen); 
sockfd是被监听的socket描述符,
addr 是指向sockaddr_in变量的指针,存放客户主机的信息 ;
addrten 指向值为sizeof(struct sockaddr_in)的整型指针变量。
返回:成功返回一个新的socket描述符,来供这个新连接来使用。 错误发生时返回一个-1并且设置相应的errno值。

6.Send:

在连接(TCP)的socket方式下发送信息
int send(int sockfd, const void *msg, int len, int flags); 
Sockfd是用来传输数据的socket描述符
msg是一个指向要发送数据的指针。 
Len是以字节为单位的数据的长度。
flags一般情况下置为0。

7.recv:

在连接(TCP)的socket方式下接收数据

int recv(int sockfd,void *buf,int len,unsigned int flags); 
Sockfd是接受数据的socket描述符;
buf 是存放接收数据的缓冲区;
len是缓冲的长度。
Flags也被置为0。
返回:实际上接收的字节数,如果连接中止,返回0,。出现错误时,返回-1并置相应的errno值。

8.sendto:

在在无连接(UDP)的socket方式下发送数据 
int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen); 
to表示目地机的IP地址和端口号信息
tolen=sizeof (struct sockaddr)。
返回:实际发送的数据字节长度或在出现发送错误时返回-1。

9.Recvfrom()

在无连接(UDP)的socket方式下接收数据
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen); 
from 保存源机的IP地址及端口号。
fromlen=sizeof(struct sockaddr)。
返回:实际存入from中的数据字节数。当出现错误时返回-1,并置相应的errno。

10.close()

释放socket,停止任何数据操作
close(sockfd);

11.shutdown:

单向关闭连接
int shutdown(int sockfd,int how); 
how可以设为下列值: 
·0-------不允许继续接收数据 
·1-------不允许继续发送数据 
·2-------不允许继续发送和接收数据,均为允许则调用close () 
shutdown在操作成功时返回0,在出现错误时返回-1(并置相应errno)。

12. gethostbyname:

域名和IP地址的转换
struct hostent *gethostbyname(const char *name);

13.inet_pton函数:

将点分十进制串转换成网络字节序二进制值,此函数对IPv4地址和IPv6地址都能处理。 
int inet_pton(int family,const char * strptr,void * addrptr); 

第一个参数可以是AF_INET或AF_INET6:第二个参数是一个指向点分十进制串的指针:第三个参数是一个指向转换后的网络字节序的二进制值的指针。          
返回:1---成功   0---输入不是有效的表达格式   -1---失败

14.inet_ntop函数:

和inet_pton函数正好相反,inet_ntop函数是将网络字节序二进制值转换成点分十进制串。 
const char * inet_ntop(int family,const void * addrptr,char * strptr,size_t len);  

第一个参数可以是AF_INET或AF_INET6:第二个参数是一个指向网络字节序的二进制值的指针;第三个参数是一个指向转换后的点分十进制串的指针;第四个参数是目标的大小,以免函数溢出其调用者的缓冲区。 
返回:指向结果的指针---成功   NULL---失败

TCP编程函数和步骤相关推荐

  1. Linux网络编程 之 TCP编程(七)

    目录 1. TCP客户端 - 核心函数 - 完整的TCP客户端程序 2. TCP服务端 - 核心函数 - 完整的TCP客户端程序 TCP编程的核心步骤和流程: 1. TCP客户端 核心函数: 创建一个 ...

  2. Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...

    TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...

  3. TCP和UDP编程的区别,步骤

    TCP和UDP编程有一些不同的地方总结如下; TCP:  TCP编程的服务器端一般步骤是: 1.创建一个socket,用函数socket(): 2.设置socket属性,用函数setsockopt() ...

  4. Linux 网络编程——TCP编程

    概述 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 具有以下特点: 1)电话系统服务模式的抽象 2) ...

  5. linux 编程函数原型与用法

    函数原型以及部分实例应用 --------------------------------------------------------------------------------------- ...

  6. 【Linux Socket 编程入门】05 - 拉个骡子溜溜:TCP编程模型代码分析

    (一) 看看以前学了啥 前面介绍了socket的分类,IP地址,端口号(port),常用的socket数据结构以及常用的函数.现在我们来看一个例子,看看socket编程究竟是什么. (二) 一图看懂客 ...

  7. Linux C++ TCP编程

    Linux TCP编程 TCP/IP协议栈 根据传输方式不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是 面向连接 的,因此又称 基于流(stream)的套接字.TCP ...

  8. 【Linux】网络篇二--TCP编程

    网络篇二--TCP编程 一.TCP编程实现 1.编程步骤 2.socket函数 3.bind函数 4.地址转换函数 5.listen函数 6.accept函数 7.connect函数 8.send函数 ...

  9. JAVA 通过 Socket 实现 TCP 编程

    简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...

最新文章

  1. xp 安装mysql数据库_Windows XP系统中安装MySQL5.5.28数据库图文教程
  2. Glide DiskCache 原理分析
  3. Java黑皮书课后题第8章:**8.6(代数:两个矩阵相乘)编写两个矩阵相乘的方法。编写一个测试程序,提示用户输入两个3*3的矩阵,然后显示它们的乘积
  4. JavaScript高级程序设计20.pdf
  5. Go的数组切片 Python的列表
  6. linux 怎么改授权用户权限,linux – systemd:授予非特权用户权限以更改某个特定服务...
  7. BZOJ.3495.[PA2010]Riddle(2-SAT 前缀优化建图)
  8. 了解SQL Server中的倾斜数据
  9. IS-IS基础网络配置实例
  10. HTML常用的标签总结
  11. WEB-INF与META-INF详解
  12. 在html中如何画斜线,在CSS中绘制斜线
  13. 解决双屏切换为单屏,打开的软件窗口无法显示问题
  14. IP地址段与子网掩码
  15. 视频识别训练2.3(实现TensorFlow视频识别)
  16. 一看就会的Redist数据持久化之AOP
  17. 如何使用正规seo技术做网站排名?
  18. 【原创】RustDesk server demo 跑起来,centos7 开源免费的远程控制软件,自建服务器,吊打向日葵 teamviewer
  19. 一个难民做出35000亿帝国,比尔盖茨靠他成首富,乔布斯认他为偶像!
  20. 【ASP.NET】解决“System.Net.Mail.SmtpException:‘命令顺序不正确。”

热门文章

  1. w ndows连接USB不正常,Raspberry Pi Zero W 连接电脑 – 针对Windows 10 缺少RNDIS驱动
  2. 快速排序(快排)--->注释超详细
  3. sql列转行函数oracle,SQL列转行
  4. linux:Ubuntu入门基础
  5. 深度学习中的一些英文解释
  6. 工业界AI项目落地血泪教训总结
  7. 【图像分类案例】(2) DenseNet 天气图片四分类(权重迁移学习),附Tensorflow完整代码
  8. Matlab实现连通域标记算法求图像连通域
  9. 一、多个txt文件合并成1个txt文件
  10. 两个列向量相乘怎么计算_矩阵:行主序、列主序、行向量、列向量