tcp套接字编程常用函数(代码片段)

lnlin lnlin     2022-12-17     262

关键词:

socket函数

这是一个进程在执行网络I/O之前必须调用的函数,用于指定期望的通信协议类型

#include <sys/socket.h>

int socket(int family, int type, int protocol);   // 调用成功返回非负的套接字描述符,出错返回-1

connect函数

TCP客户端用connect函数来建立与TCP服务器的连接

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);   // 调用成功返回0,出错返回-1

bind函数

bind函数用于将一个本地协议地址赋予一个套接字

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);   // 调用成功返回0,出错返回-1

listen函数

listen函数仅由TCP服务器调用,listen函数将一个未连接的套接字转换成一个被动套接字,指
示内核应接受指向该套接字的连接请求。除此之外, listen函数规定了内核应该为相应套接字
排队的最大连接个数(backlog = 未完成连接队列 + 已完成连接队列, 内核允许在这个套接字
上排队的最大客户连接数)。

#include <sys/socket.h>

int listen(int sockfd, int backlog);   // 调用成功返回0,出错返回-1

accept函数

accept函数由TCP服务器调用,用于从已完成连接队列头返回下一个已完成连接

#include <sys/socket.h>

// cliaddr、addrlen用于返回已连接对端进程(客户)的协议地址
// 调用成功返回非负描述符,出错返回-1
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);  

close函数

close函数可用于关闭套接字,并终止TCP连接

#include <unistd.h>

int close(int sockfd);     // 调用成功返回0,出错返回-1

getsockname函数和getpeername函数

这两个函数用于返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字
关联的外地协议地址(getpeername)

#include <sys/socket.h>

int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);   // 调用成功返回0,出错返回-1

int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);    // 调用成功返回0,出错返回-1

用于获取个设置套接字选项

#include <sys/socket.h>

// 调用成功返回0,出错返回-1
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);       

// 调用成功返回0,出错返回-1
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);   

 

示例:简单的时间获取程序————客户端和服务端实现

 1 #include "net.h"
 2 
 3 #define SA struct sockaddr
 4 
 5 int main(int argc, char **argv)
 6 
 7     int sockfd, n;
 8     char recvline[MAXLINE + 1];
 9     struct sockaddr_in servaddr;
10 
11     if (argc != 2)
12     
13         printf("Error: Options!
");
14           return -1;
15     
16 
17     if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
18     
19         printf("Error: Socket!
");
20           return -1;
21     
22 
23     bzero(&servaddr, sizeof(servaddr));
24     servaddr.sin_family = AF_INET;
25     servaddr.sin_port = htons(13);
26 
27     if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
28     
29         printf("Error: inet_pton for %s
", argv[1]);
30                 return -1;
31     
32 
33     if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
34     
35         printf("Error: Connect!
");
36     
37 
38     while ( (n = read(sockfd, recvline, MAXLINE)) > 0 )
39     
40         recvline[n] = ;   
41 
42               if (fputs(recvline, stdout) == EOF)
43               
44                         printf("Error: Fputs!
");
45               
46     
47 
48     if (n < 0)
49     
50         printf("Erroe: Read!
");
51     
52 
53     return 0;
54 
 1 #include "net.h"
 2 
 3 #define SA struct sockaddr
 4 
 5 int main(int argc, char **argv)
 6 
 7     int listenfd, connfd;
 8     struct sockaddr_in servaddr;
 9     char buff[MAXLINE];
10     time_t ticks;
11 
12     if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
13     
14         printf("Error: Socket!
");
15                 return -1;
16     
17 
18     bzero(&servaddr, sizeof(servaddr));
19     servaddr.sin_family = AF_INET;
20     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
21     servaddr.sin_port = htons(13);
22 
23     if (bind(listenfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
24     
25         printf("Error: Bind!
");
26                 return -1;
27     
28 
29     if (listen(listenfd, LISTENQ) < 0)
30     
31         printf("Error: Listen!
");
32                 return -1;
33     
34 
35     for ( ; ; )
36     
37         if ( (connfd = accept(listenfd, (SA *) NULL, NULL)) < 0 )
38         
39             printf("Error: Accept!
");
40             return -1;
41         
42 
43                 ticks = time(NULL);
44                 snprintf(buff, sizeof(buff), "%.24s
", ctime(&ticks));
45 
46                 if (write(connfd, buff, strlen(buff)) < 0)
47                 
48                     printf("Error: Write!
");
49                     return -1;
50                 
51 
52                 if (close(connfd) < 0)
53                 
54                     printf("Error: Close!
");
55                     return -1;
56                 
57     
58 
59     return 0;
60 

 





网络编程套接字(tcp)(代码片段)

...务端serverTcp.cc文件                 服务端创建套接字                 服务端绑定                 服务端监听                 服务端获取连接                 服务端提供服务     ... 查看详情

socket编程(代码片段)

一、什么是socketsocket(简称 套接字)是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的例如我们每天浏览网页、Q... 查看详情

基本套接字编程--tcp篇(代码片段)

1.Socket简介Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。几个定义:(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要... 查看详情

linux网络编程之套接字--tcp(代码片段)

...程🍨3.4、部署服务器🌈前言这篇文章给大家带来套接字的学习!!!🌸1、TCP相关API【UDP中已经详细介绍了背景知识和structsockaddr结构:跳转】使用TCP网络通信所用到的接口比UDP多了几个,因为TCP... 查看详情

socket编程——客户端实例(tcp)(代码片段)

一、客户端操作流程  1.1 加载套接字库(WSAStartup())  1.2创建套接字(socket())。  1.3向服务器发出连接请求(connect())。  对于客户端来说,它不需要绑定,可以直接连接服务器。这可以通过调用connect函数与服务器建... 查看详情

网络编程常用结构与函数(代码片段)

IPv4套接字地址结构:sockaddr_in#include<netinet/in.h>structin_addrin_addr_ts_addr;//32-bitIPv4地址,网络字节序;structsockaddr_inuint8_tsin_len;//结构长度sa_family_tsin_family;//AF_INETin_port_tsin_port;//16-bitT 查看详情

socket套接字编程(代码片段)

socket套接字编程  目标:根据socket模块提供的接口函数,进行组合使用完成基于tcp或者udp的网路编程。  套接字:完成上述目标的一种编程手段,编程方案套接字分类:  流式套接字(SOCK_STREAM)... 查看详情

10.网络编程之socket(代码片段)

目录一、什么是socket?1.1套接字简介1.2套接字地址:主机-端口对二、面向连接的套接字和为无连接的套接字2.1面向连接的套接字2.2无连接的套接字三、python中socket3.1socket()模块函数3.2套接字对象(内置)方法3.3Socket中的一些参数四... 查看详情

python网络编程—socket套接字编程(tcp)(代码片段)

套接字介绍1.套接字:实现网络编程进行数据传输的一种技术手段2.Python实现套接字编程:importsocket3.套接字分类流式套接字(SOCK_STREAM):以字节流方式传输数据,实现tcp网络传输方案。(面向连接--tcp协议--可靠的--流式套接字)数据... 查看详情

套接字编程简介(代码片段)

目录1.端口号2.套接字对3.套接字地址结构IPv4套接字地址结构通用套接字地址结构4.字节排序函数5.地址转换函数1.端口号在同一台主机或设备上,可能有多个进程同时在使用TCP或UDP协议,端口号的作用就是区分这些不同的进程,... 查看详情

《unix网络编程卷1:套接字联网api》学习笔记——tcp客户/服务器程序示例(代码片段)

...dpid; socklen_tclilen; structsockaddr_incliaddr,servaddr; /*创建一个TCP套接字*/ listenfd=socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_addr.s_addr=htonl(INADDR_ANY); servaddr.sin_port=htons(SERV_PORT);/*SERV_POR... 查看详情

网络编程套接字,osi七层架构各层协议最全讲解(代码片段)

...6、Socket常用函数接口及其原理6.1、使用socket()函数创建套接字6.2、使用bind()和connect()函数6.3、使用listen()和accept()函数6.4、socket数据的接收和发送6.5、socket缓冲区以及阻塞模式Socket原理转至:https://www.jianshu.com/p/066d99da7cbd1、什... 查看详情

linux网络套接字编程(代码片段)

...源端口号与目的端口号▶UDP与TCP协议▶网络字节序💡套接字(socket)介绍▶概念▶分类▶工作流程💡socket编程▶socket编程接口▶sockaddr结构体🎄sockaddr结构体🎄sockaddr_in结构体🎄in_addr结构体💡sock... 查看详情

网络linuxlinux网络编程-tcp,udp套接字编程及代码示范(代码片段)

这里写目录标题UDP类UDP服务端单执行流UDP客户端TCP类TCP单执行流服务器TCP客户端TCP多执行流(线程)TCP多执行流(进程)本文我们分为TCP和UDP协议网络程序的编写:他们的区别如下:项目特点UDP用户数据报协议,无需连接&#... 查看详情

c_cpplinux的下tcp的套接字编程示例(代码片段)

查看详情

tcp/ip网络编程——理解网络编程和套接字编程(代码片段)

文章目录一、理解网络编程和套接字编程1.1socket套接字1.1.1一个例子来表示TCP的网络连接1.1.2程序实现1.2文件操作1.2.1文件描述符一、理解网络编程和套接字编程1.1socket套接字网络编程又称为套接字编程,为什么要用套接字... 查看详情

go语言网络编程(代码片段)

socket编程Socket是BSDUNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。电脑上... 查看详情

java网络编程(代码片段)

...tName()getHostAddress()二、TCP和UDP编程记忆点:1.TCP使用流套接字;UDP使用数据报套接字2.对于客户端:TCP在套接字的构造器里给出服务器端的IP和端口号;UDP的套接字构造器用空参的,在数据报中给出3.对于服务器&... 查看详情