TCP、UDP客户端

TCP客户端

#include <mystdio.h>

#define CLI_PORT 6666

#define CLI_IP "192.168.124.210"

int main(int argc, const char *argv[])//argv[1] IP argv[2] 端口号

{

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(argv[1]));

sin.sin_addr.s_addr = inet_addr(argv[2]);

//连接指定的服务器

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

{

perror("connect");

return -1;

}

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

char buf[128]="";

ssize_t res;

while(1)

{

//从终端输入数据

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

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

buf[strlen(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 buf[128] = "";

struct sockaddr_in rcv;

socklen_t addrlen = sizeof(rcv);

while(1)

{

bzero(buf,sizeof(buf));

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

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

buf[strlen(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[])//argv[1] IP argv[2] 端口号

{

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(argv[1]));

sin.sin_addr.s_addr = inet_addr(argv[2]);

//连接指定的服务器

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 buf[5]={0xff,0x02,0x00,30,0xff};

unsigned char str[5] = {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:

buf[3] += 5;

if(buf[3]>90)

buf[3] = 90;

break;

case 31:

buf[3] -= 5;

if(buf[3] < -90)

buf[3] = -90;

break;

case 30:

str[3] -= 5;

if(str[3] < 0)

str[3] = 0;

break;

case 32:

str[3] += 5;

if(str[3] >180 )

str[3] = 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;

}

相关推荐
EasyDSS1 小时前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
网安墨雨2 小时前
常用网络协议
网络·网络协议
ZoeLandia4 小时前
WebSocket | 背景 概念 原理 使用 优缺点及适用场景
网络·websocket·网络协议
Crossoads8 小时前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
诸葛悠闲8 小时前
SOME/IP 协议详解——信息格式
网络协议
_oP_i11 小时前
HTTP 请求Media typetext/plain application/json text/json区别
网络协议·http·json
OkeyProxy13 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
zquwei13 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
群联云防护小杜14 小时前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡
ihengshuai14 小时前
HTTP协议及安全防范
网络协议·安全·http