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;

}

相关推荐
mister_guo1 小时前
HTTP 和 RPC:从一次干饭说清它们的区别
网络协议·http·rpc
K成长日志2 小时前
BLE Host层L2CAP -- 配置参数选项
物联网·网络协议·嵌入式·蓝牙·iot·ble·bluetooth
幻智星科技4 小时前
纯FPGA网络通信实现微秒级确定性延迟
网络协议·fpga开发·硬件架构
码林鼠5 小时前
flutter网络http请求入门教程-dio
网络协议·flutter·http
德迅云安全-上官8 小时前
新一代智能分布式云接入:应用加速守护 TCP 业务安全与体验
分布式·tcp/ip·安全
zxanz18 小时前
免费 SSL 证书的隐性成本:续期压力、稳定性与商业风险评估
网络·网络协议·ssl
zzu123zsw8 小时前
面对多 RPC 扇入超时崩溃:深入 asyncTool 核心 DAG 编排与线程池隔离防护
java·网络·spring boot·网络协议·rpc·并发编程
福娃筱欢8 小时前
金仓数据库配置SSL双向认证
数据库·网络协议·ssl
K成长日志8 小时前
BLE Host层L2CAP -- 状态机
物联网·网络协议·无线通信·蓝牙·iot·ble
打工仔折腾 AI9 小时前
Linux 网络编程:从零掌握 TCP Socket 编程与 C++ 实战落地
linux·网络·人工智能·后端·python·tcp/ip·性能优化