前置:
- 手机端通过TCP发送(1-20)的数字到Linux下的主机,Linux的主机实现服务端的监听
- Linux服务端的IP地址是192.168.5.174,端口号:9999
1.手机客户端编程
tcp_client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void main(void)
{
int fd;
struct sockaddr_in addr;
int r;
int i=0;
//1.socket
fd=socket(AF_INET,SOCK_STREAM,0);
if(fd==-1) printf("1:%m\n"),exit(-1);
printf("建立socket成功!\n");
//2.connect
addr.sin_family=AF_INET;
addr.sin_port=htons(9999);
inet_aton("192.168.5.174",&addr.sin_addr);
r=connect(fd,
(struct sockaddr*)&addr,sizeof(addr));
if(r==-1) printf("2:%m\n"),exit(-1);
printf("连接服务器成功!\n");
for(i=0;i<20;i++)
{
send(fd,&i,4,0);
}
close(fd);
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
tcp_client.c
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
LOCAL_MODULE := tcp_client
include $(BUILD_EXECUTABLE)
2. Linux下主机实现服务端的监听
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
main()
{
int serverfd;
int cfd;
int a;
struct sockaddr_in sadr;
struct sockaddr_in cadr;
socklen_t len;
int r;
char buf[1024];
//1.socket
serverfd=socket(AF_INET,SOCK_STREAM,0);
if(serverfd==-1) printf("1:%m\n"),exit(-1);
printf("建立服务器socket成功!\n");
//2.bind
sadr.sin_family=AF_INET;
sadr.sin_port=htons(9999);
inet_aton("192.168.5.174",&sadr.sin_addr);
r=bind(serverfd,
(struct sockaddr*)&sadr,sizeof(sadr));
if(r==-1) printf("2:%m\n"),exit(-1);
printf("服务器地址绑定成功!\n");
//3.listen
r=listen(serverfd,10);
if(r==-1) printf("3:%m\n"),exit(-1);
printf("监听服务器成功!\n");
//4.accept
len=sizeof(cadr);
cfd=accept(serverfd,
(struct sockaddr*)&cadr,&len);
printf("有人连接:%d,IP:%s:%u\n",
cfd,inet_ntoa(cadr.sin_addr),
ntohs(cadr.sin_port));
//5.处理代理客户描述符号的数据
while(1)
{
r=recv(cfd,&a,4,MSG_WAITALL);
if(r>0)
{
//buf[r]=0;
printf("::%d\n",a);
}
if(r==0)
{
printf("连接断开!\n");
break;
}
if(r==-1)
{
printf("网络故障!\n");
break;
}
}
close(cfd);
close(serverfd);
}
3. 测试结果
客户端:
root@Hisense:/data # ./tcp_client
建立socket成功!
2:m
服务端:
root@zhuyong:/home/zhuyong/test# ./tcp_server
建立服务器socket成功!
服务器地址绑定成功!
监听服务器成功!
有人连接:4,IP:192.168.2.10:41933
::0
::1
::2
::3
::4
::5
::6
::7
::8
::9
::10
::11
::12
::13
::14
::15
::16
::17
::18
::19
连接断开!