linux TCP编程示例

linux TCP编程

主要是这几个函数
socket()
send/recv()/write()/read()
close()
服务器端专用
bind()
listen()
accept()
客户端专用
connect()

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();
}

服务端代码示例
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;
}

main.c

#include <stdio.h>
#include "tcp_server.h"

int main()
{
	char tmp[15] = "hello tcp\n";
	tcp_sever_init();
	tcp_send("tmp",10);
	close_tcp();
}
发布了16 篇原创文章 · 获赞 0 · 访问量 224
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览