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;

}

相关推荐
hrrrrb2 小时前
【TCP/IP】12. 文件传输协议
服务器·网络·tcp/ip
啟明起鸣6 小时前
【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
c语言·网络·tcp/ip·p2p
专注VB编程开发20年8 小时前
常见 HTTP 方法的成功状态码200,204,202,201
开发语言·网络协议·tcp/ip·http
Dsocc9 小时前
TCP 动态选路协议全面研究:OSPF、BGP 与 IS-IS 的比较与应用分析
网络·网络协议·tcp/ip
爱思德学术11 小时前
中国计算机学会(CCF)推荐学术会议-B(计算机体系结构/并行与分布计算/存储系统):SOCC 2025
网络协议·机器学习·云计算·边缘计算
tan77º11 小时前
【Linux网络编程】Socket - TCP
linux·网络·c++·tcp/ip
hrrrrb16 小时前
【TCP/IP】2. 计算机网络与因特网体系结构
tcp/ip·计算机网络
是阿建吖!17 小时前
【Linux | 网络】socket编程 - 使用TCP实现服务端向客户端提供简单的服务
linux·网络·tcp/ip
搬砖天才、18 小时前
SpringGateway网关增加https证书验证
网络协议·http·https
cui_win18 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_dsack
linux·网络·tcp/ip