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;

}

相关推荐
卓码软件测评3 小时前
第三方软件质量检测:RTSP协议和HLS协议哪个更好用来做视频站?
网络·网络协议·http·音视频·web
川石课堂软件测试3 小时前
自动化测试之 Cucumber 工具
数据库·功能测试·网络协议·测试工具·mysql·单元测试·prometheus
卓码软件测评4 小时前
第三方媒体流压力测试:k6插件xk6-webrtc的使用来测试媒体流的性能
网络协议·测试工具·http·https·webrtc·ssl·媒体
悟能不能悟4 小时前
电脑没法ping通某个网段的ip
网络协议·tcp/ip·电脑
duration~6 小时前
UDP 首部
网络·网络协议·udp
迎風吹頭髮6 小时前
Linux服务器编程实践20-TCP服务 vs UDP服务:核心差异对比
linux·服务器·tcp/ip
周杰伦_Jay6 小时前
【计算机网络三层深度解析:应用层、传输层与网络层】HTTP、TCP、UDP、IP、ICMP、ARP
tcp/ip·计算机网络·http
liulilittle7 小时前
HI3798MV100 运营商机顶盒NAS LINUX OS - IP地址静态绑定指南
linux·运维·服务器·网络·tcp/ip·nas·机顶盒
一品威客网8 小时前
影视 IP 全链开发:App 如何成为核心
网络·网络协议·tcp/ip
suoyue_zhan8 小时前
【TCP-BP】时序数据库 TDengine 限时免费培训&认证
tcp/ip·时序数据库·tdengine