programación linux TCP
Principalmente estas funciones
socket ()
enviar / recv () / escribir () / leer ()
cerrar () enlace
dedicado del lado del servidor
()
escuchar ()
aceptar () conectar
dedicado del lado del cliente
()
Cliente TCP
tcp_client.c
```c
//-------tcp相关头文件------
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h> //close()
#include <string.h> //strcmp()等字符串操作函数
#include <stdlib.h>
static int socket_fd = -1;
//关闭tcp配置初始化函数
//参数 void
//返回 void
int tcp_client_init(void)
{
// 1 创建tcp通信socket
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd == -1)
{
perror("socket failed!\n");
return -1;
}
struct sockaddr_in server_addr = {
0};
//服务器的地址信息
server_addr.sin_family = AF_INET;//IPv4协议
server_addr.sin_port = htons(876);//服务器端口号
server_addr.sin_addr.s_addr = inet_addr("183.230.40.39");//设置服务器
//连接服务器
int ret = connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(ret == -1)
{
perror("connect failed!\n");
return -1;
}
else
{
printf("connect server successful!\n");
}
return 0;
}
//关闭tcp发送函数
//参数 buf 要发送的数组 len发送的长度
//返回 成功 1 是失败 0
int tcp_send(char *buf,int len)
{
write(socket_fd, buf, len);//发送消息
}
//关闭tcp连接函数
//参数 buf 接收的数组 len 长度
//返回 成功 1 是失败 0
int tcp_rcv(char *buf,int len)
{
int ret = 0;
ret = recv(socket_fd, buf, len, 0);
if(ret < 0)
{
perror("recv\n");
close(socket_fd);
return -1;
}
return ret;
}
//关闭tcp连接函数
//参数 void
//返回 void
void close_tcp(void)
{
close(socket_fd);
socket_fd = -1;
}
main.c
#include <stdio.h>
#include "tcp_client.h"
int main()
{
char tmp[15] = "hello tcp\n";
tcp_client_init();
tcp_send("tmp",10);
close_tcp();
}
Ejemplo de código del lado del servidor
tcp_sever.c
```c
```c
//-------tcp相关头文件------
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h> //close()
#include <string.h> //strcmp()等字符串操作函数
#include <stdlib.h>
static int socket_fd = -1;
static int connfd=0;
//关闭tcp配置初始化函数
//参数 void
//返回 void
int tcp_server_init(void)
{
// 1 创建tcp通信socket
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd == -1)
{
perror("socket failed!\n");
return -1;
}
struct sockaddr_in addrSrc,addrClient;
addrSrc.sin_family=AF_INET;
addrSrc.sin_port=htons(6666);
addrSrc.sin_addr.s_addr=INADDR_ANY;
//绑定
bind(socket_fd,(struct sockaddr*)&addrSrc,sizeof(struct sockaddr_in));
//监听
listen(socket_fd,5);
int len=sizeof(struct sockaddr_in);
connfd=accept(listenSocket,(struct sockaddr*)&addrClient,&len);
char *ipStr=inet_ntoa(addrClient.sin_addr);
printf("connect is %s\n",ipStr);
return 0;
}
//关闭tcp发送函数
//参数 buf 要发送的数组 len发送的长度
//返回 成功 1 是失败 0
int tcp_send(char *buf,int len)
{
write(socket_fd, buf, len);//发送消息
}
//关闭tcp连接函数
//参数 buf 接收的数组 len 长度
//返回 成功 1 是失败 0
int tcp_rcv(char *buf,int len)
{
int ret = 0;
ret = recv(socket_fd, buf, len, 0);
if(ret < 0)
{
perror("recv\n");
close(socket_fd);
return -1;
}
return ret;
}
//关闭tcp连接函数
//参数 void
//返回 void
void close_tcp(void)
{
close(socket_fd);
socket_fd = -1;
}
C Principal
#include <stdio.h>
#include "tcp_server.h"
int main()
{
char tmp[15] = "hello tcp\n";
tcp_sever_init();
tcp_send("tmp",10);
close_tcp();
}