TCP、UDP客户端

TCP客户端

#include <mystdio.h>

#define CLI_PORT 6666

#define CLI_IP "192.168.124.210"

int main(int argc, const char *argv\[\])//argv1 IP argv2 端口号

{

if(argc <3)

{

printf("请在命令传参端口号和IP地址\n");

return -1;

}

//创建流式套接字文件

int cfd = socket(AF_INET,SOCK_STREAM,0);

if(cfd < 0)

{

perror("socket");

return -1;

}

printf("socket seccuss cfd = %d %d\n",cfd,LINE);

//允许端口号重复使用

int reuse = 1;

if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)

{

perror("setsockopt");

return -1;

}

//填充客户端自身的地址信息,给bind函数绑定使用;

struct sockaddr_in cin;

cin.sin_family = AF_INET;

cin.sin_port = htons(CLI_PORT);

cin.sin_addr.s_addr = inet_addr(CLI_IP);

//填充服务器的地址信息,给connet函数使用

struct sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons(atoi(argv1));

sin.sin_addr.s_addr = inet_addr(argv2);

//连接指定的服务器

if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)

{

perror("connect");

return -1;

}

printf("connet seccuss %d\n",LINE);

char buf128="";

ssize_t res;

while(1)

{

//从终端输入数据

printf("请输入数据>>>\n");

fgets(buf,sizeof(buf),stdin);

bufstrlen(buf)-1 = '\0';

//发送数据

res = send(cfd,buf,sizeof(buf),0);

if(res < 0)

{

perror("send");

return -1;

}

//接收

bzero(buf,sizeof(buf));

res = recv(cfd,buf,sizeof(buf),0);

if(res < 0)

{

perror("recv");

return -1;

}

else if(0 == res)

{

printf("服务器下线 %d\n",LINE);

break;

}

printf("%s %d",buf,LINE);

}

close(cfd);

return 0;

}

UDP客户端

#include <mystdio.h>

#define PORT 8888

#define IP "192.168.124.210"

int main(int argc, const char *argv\[\])

{

int cfd = socket(AF_INET,SOCK_DGRAM,0);

if(cfd < 0)

{

fprintf(stderr,"line:%d",LINE);

perror("sockaddr");

return -1;

}

printf("创建报式套接字成功 cfd=%d %d\n",cfd,LINE);

//允许端口被重复使用

int reuse = 1;

if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)

{

fprintf(stderr,"line:%d",LINE);

perror("setsockopt");

return -1;

}

//填充服务器的地址信息

struct sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons(PORT);

sin.sin_addr.s_addr = inet_addr(IP);

char buf128 = "";

struct sockaddr_in rcv;

socklen_t addrlen = sizeof(rcv);

while(1)

{

bzero(buf,sizeof(buf));

printf("请输入信息>>>\n");

fgets(buf,sizeof(buf),stdin);

bufstrlen(buf)-1 = '\0';

if(sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0)

{

fprintf(stderr,"line:%d",LINE);

perror("sendto");

return -1;

}

if(strcmp(buf,"quit") == 0)

{

break;

}

printf("发送成功\n");

bzero(buf,sizeof(buf));

if(recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&rcv,&addrlen)<0)

{

fprintf(stderr,"line:%d",LINE);

perror("recvfrom");

return -1;

}

if(strcmp(buf,"quit") == 0)

{

break;

}

printf("%s:%d %s %d\n",\

inet_ntoa(rcv.sin_addr),ntohs(rcv.sin_port),buf,LINE);

}

close(cfd);

return 0;

}

机械臂

#include <mystdio.h>

#define CLI_PORT 6666

#define CLI_IP "192.168.124.210"

int main(int argc, const char *argv\[\])//argv1 IP argv2 端口号

{

if(argc <3)

{

printf("请在命令传参端口号和IP地址\n");

return -1;

}

//创建流式套接字文件

int cfd = socket(AF_INET,SOCK_STREAM,0);

if(cfd < 0)

{

perror("socket");

return -1;

}

printf("socket seccuss cfd = %d %d\n",cfd,LINE);

//允许端口号重复使用

int reuse = 1;

if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)

{

perror("setsockopt");

return -1;

}

//填充服务器的地址信息,给connet函数使用

struct sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons(atoi(argv1));

sin.sin_addr.s_addr = inet_addr(argv2);

//连接指定的服务器

if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)

{

perror("connect");

return -1;

}

printf("connet seccuss %d\n",LINE);

int fd = open("/dev/input/event1",O_RDONLY);

if(fd<0)

{

perror("open");

return -1;

}

struct input_event ev;

char buf5={0xff,0x02,0x00,30,0xff};

unsigned char str5 = {0xff,0x02,0x01,20,0xff};

if(send(cfd,buf,sizeof(buf),0)< 0)

{

perror("send");

return -1;

}

if(send(cfd,str,sizeof(str),0)< 0)

{

perror("send");

return -1;

}

while(1)

{

if(read(fd,&ev,sizeof(ev))<0)

{

perror("read");

return -1;

}

switch(ev.code*ev.value)

{

case 17:

buf3 += 5;

if(buf3>90)

buf3 = 90;

break;

case 31:

buf3 -= 5;

if(buf3 < -90)

buf3 = -90;

break;

case 30:

str3 -= 5;

if(str3 < 0)

str3 = 0;

break;

case 32:

str3 += 5;

if(str3 >180 )

str3 = 180;

break;

default:

continue;

}

if(send(cfd,buf,sizeof(buf),0)<0)

{

perror("send");

return -1;

}

if(send(cfd,str,sizeof(str),0)<0)

{

perror("send");

return -1;

}

}

close(cfd);

return 0;

}

相关推荐
傲世仙尊5 小时前
HTTP请求与应答-URL全网唯一文件路径报文结构与短连接
网络·网络协议·http
AKA__Zas6 小时前
TCP 与 IP 浅显皮毛
服务器·网络·tcp/ip
杨福宇16 小时前
100BASE T1以太网实时控制的危机V3.21 ——辅助自动驾驶难达标
网络·网络协议·安全·自动驾驶·汽车
Lancker16 小时前
chnroute-linux — 中国大陆 IP 段每日自动更新 + 「仅允许国内访问」落地
linux·运维·tcp/ip
Zelman19 小时前
协议栈数据流全景分析
网络协议·tcp/ip·https
别动我齐刘海19 小时前
简历技术栈全面复习——UDP / TCP / CAN / ZMQ / Protobuf 通信工程
网络·c++·python·tcp/ip·机器学习·udp·github
YumiProxy1 天前
服务器动态IP导致SSH频繁断连?从保活配置到自动重连的完整排查方案
服务器·tcp/ip·ssh
星恒讯工业路由器1 天前
车载以太网中的TCP与UDP:诊断、服务通信与网络管理怎么选
网络·tcp/ip·udp
傲世仙尊1 天前
HTTP起步-URL域名解析与协议的本质
网络·网络协议·http
wdfk_prog1 天前
Wi-Fi Direct 教程 05:control socket 与 eloop——P2P_FIND 怎样进入 wpa_supplicant 命令解析器
运维·服务器·后端·网络协议·ubuntu·p2p·wifi-direct