linux tcp 编程 c语言

linux tcp 编程 c语言


2024年3月3日发(作者:)

linux tcp 编程 c语言

TCP编程是一种常见的网络编程方式,用于建立可靠的网络连接并传输数据。在Linux系统中,可以使用C语言编写TCP程序,以下是一些常用的TCP编程函数和代码示例。

1. socket函数:创建一个新的套接字。

```c。

#include

int socket(int domain, int type, int protocol);。

```。

参数:

- domain:地址族,通常为AF_INET。

- type:套接字类型,通常为SOCK_STREAM(流式套接字)。

- protocol:协议,通常为0(表示使用默认协议)。

返回值:新的套接字的文件描述符。

示例:

```c。

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

if(sockfd < 0) 。

perror("socket error");。

exit(1);。

}。

```。

2. bind函数:将套接字绑定到一个本地地址。

```c。

#include

int bind(int sockfd, const struct sockaddr *addr, socklen_t

addrlen);。

```。

参数:

- sockfd:套接字的文件描述符。

- addr:本地地址结构体,结构体类型为struct sockaddr(需要转换为实际的地址类型)。

- addrlen:地址结构体的长度。

返回值:0表示成功,-1表示失败。

示例:

```c。

struct sockaddr_in servaddr;。

memset(&servaddr, 0, sizeof(servaddr));。

_family = AF_INET;。

_addr.s_addr = htonl(INADDR_ANY);。

_port = htons(SERV_PORT);。

if(bind(sockfd, (struct sockaddr *)&servaddr,

sizeof(servaddr)) < 0) 。

perror("bind error");。

exit(1);。

}。

```。

3. listen函数:将套接字设置为监听状态,等待客户端连接。```c。

#include

int listen(int sockfd, int backlog);。

```。

参数:

- sockfd:套接字的文件描述符。

- backlog:等待连接的最大队列长度。

返回值:0表示成功,-1表示失败。

示例:

```c。

if(listen(sockfd, LISTENQ) < 0) 。

perror("listen error");。

exit(1);。

}。

```。

4. accept函数:接受客户端的连接请求,并返回一个新的套接字,用于与客户端通信。

```c。

#include

int accept(int sockfd, struct sockaddr *addr, socklen_t

*addrlen);。

```。

参数:

- sockfd:套接字的文件描述符。

- addr:客户端地址结构体,结构体类型为struct sockaddr(需要转换为实际的地址类型)。

- addrlen:地址结构体的长度,需要初始值为sizeof(struct

sockaddr),accept函数会更新其值为客户端地址结构体的实际长度。

返回值:新的套接字的文件描述符。

示例:

```c。

struct sockaddr_in cliaddr;。

socklen_t clilen = sizeof(cliaddr);。

int connfd = accept(sockfd, (struct sockaddr *)&cliaddr,

&clilen);。

if(connfd < 0) 。

perror("accept error");。

exit(1);。

}。

```。

5. connect函数:向指定的服务器建立连接。

```c。

#include

int connect(int sockfd, const struct sockaddr *addr,

socklen_t addrlen);。

```。

参数:

- sockfd:套接字的文件描述符。

- addr:服务器地址结构体,结构体类型为struct sockaddr(需要转换为实际的地址类型)。

- addrlen:地址结构体的长度。

返回值:0表示成功,-1表示失败。

示例:

```c。

struct sockaddr_in servaddr;。

memset(&servaddr, 0, sizeof(servaddr));。

_family = AF_INET;。

_port = htons(SERV_PORT);。

if(inet_pton(AF_INET, SERV_ADDR, &_addr)

perror("inet_pton error");。

exit(1);。

}。

if(connect(sockfd, (struct sockaddr *)&servaddr,

sizeof(servaddr)) < 0) 。

perror("connect error");。

exit(1);。

}。

<= 0) 。

```。

6. send函数和recv函数:发送和接收数据。

```c。

#include

#include

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

flags);。

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

```。

参数:

- sockfd:套接字的文件描述符。

- buf:发送或接收的数据缓冲区。

- len:数据的长度。

- flags:发送或接收数据的选项,通常为0。

返回值:成功时返回发送或接收的数据长度,失败时返回-1。

示例:

```c。

char buf[MAXLINE];。

scanf("%s", buf);。

if(send(connfd, buf, strlen(buf), 0) < 0) 。

perror("send error");。

exit(1);。

}。

memset(buf, 0, sizeof(buf));。

if(recv(connfd, buf, MAXLINE, 0) < 0)

perror("recv error");。

exit(1);。

}。

printf("Received: %sn", buf);。```。

7. close函数:关闭套接字。

```c。

#include

int close(int fd);。

```。

参数:

- fd:套接字的文件描述符。

返回值:0表示成功,-1表示失败。。

示例:

```c。

close(sockfd);。

close(connfd);。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1709451911a1628187.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信