linux 系统 C语言 TCP网络
一、TCP客户端
1、tcp_client.c
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<unistd.h>
static int socket_fd = 0;
int tcp_client_init(char *ip,int port){
int ret;
socket_fd = socket(AF_INET,SOCK_STREAM,0);
if(socket_fd == -1){
printf("创建失败!");
return -1;
}
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);
servaddr.sin_addr.s_addr = inet_addr(ip);
ret = connect(socket_fd,&servaddr,sizeof(servaddr));
if(ret==1)
printf("连接失败%s\n",ip);
}
int tcp_client_send(char *buff,int len){
write(socket_fd,buff,len);
}
int tcp_client_rcv(char *buff,int len){
int ret;
ret = read(socket_fd,buff,len);
return ret;
}
int tcp_client_close(){
close(socket_fd);
}
2、tcp_client.h
#ifndef __TCP_CLIENT_H
#define __TCP_CLIENT_H
int tcp_client_init(char *ip,int port);
int tcp_client_send(char *buff,int len);
int tcp_client_rcv(char *buff,int len);
int tcp_client_close();
#endif
3、main.c
#include<stdio.h>
#include "tcp_client.h"
#include "tcp_server.h"
int tcp_test(){
int rcv_len;
char buff[1024] = {0};
tcp_client_init("192.168.1.102",1129);
while(1){
rcv_len = tcp_client_rcv(buff,1024);
if(rcv_len>1){
printf("tcp_rcv:%s\n",buff);
tcp_client_send("hello server\n",14);
}
}
}
int main(){
tcp_test1();
return 0;
}
4、Makefile
CC=gcc
TARGET = main_tcp_client
OBJS = tcp_client.o main.c
$(TARGET):$(OBJS)
$(CC) $(OBJS) -o $(TARGET)
tcp_client.o:tcp_client.c
$(CC) -c tcp_client.c
clean:
rm -rf $(TARGET) *.o
二、TCP服务器端
1、tcp_server.c
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<unistd.h>
static int sockst_c_fd = 0;
static int socket_fd = 0;
int tcp_server_init(int port){
int ret;
socket_fd = socket(AF_INET,SOCK_STREAM,0);
if(socket_fd == -1){
printf("创建失败!");
return -1;
}
struct sockaddr_in localaddr,clientaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(port);
localaddr.sin_addr.s_addr = INADDR_ANY;
ret = bind(socket_fd,&localaddr,sizeof(localaddr));
if(ret==-1){
printf("绑定失败");
return -1;
}
ret = listen(socket_fd,3);
if(ret==-1){
printf("监听失败");
return -1;
}
socklen_t addrlen = 0;
while(1){
sockst_c_fd = accept(socket_fd,&clientaddr,&addrlen);
if(sockst_c_fd!=0)
break;
printf("连接成功\n");
}
}
int tcp_server_send(char *buff,int len){
write(sockst_c_fd,buff,len);
}
int tcp_server_rcv(char *buff,int len){
int ret;
ret = read(sockst_c_fd,buff,len);
return ret;
}
int tcp_server_close(){
close(socket_fd);
}
2、tcp_server.h
#ifndef __TCP_SERVER_H
#define __TCP_SERVER_H
int tcp_server_init(int port);
int tcp_server_send(char *buff,int len);
int tcp_server_rcv(char *buff,int len);
int tcp_server_close();
#endif
3、main.c
#include<stdio.h>
#include "tcp_client.h"
#include "tcp_server.h"
int tcp_test1(){
int rcv_len;
char buff[1024] = {0};
tcp_server_init(1111);
while(1){
tcp_server_send("hello server\n",14);
rcv_len = tcp_server_rcv(buff,1024);
if(rcv_len>1){
printf("tcp_rcv:%s\n",buff);
}
}
}
int main(){
tcp_test1();
return 0;
}
4、Makefile
CC=gcc
#TARGET = main_tcp_client
TARGET = main_tcp_server
OBJS = tcp_client.o tcp_server.o main.c
$(TARGET):$(OBJS)
$(CC) $(OBJS) -o $(TARGET)
tcp_client.o:tcp_client.c
$(CC) -c tcp_client.c
tcp_server.o:tcp_server.c
$(CC) -c tcp_server.c
clean:
rm -rf $(TARGET) *.o