作业要求:
1.生成机械臂
2.TCP/UDP(没时间写了,以后补)再写一遍
3.思维导图(没时间写了,以后补)
#include<myhead.h>
#define CLI_PORT 8080
#define CLI_IP "192.168.117.60"
#define SER_PORT 8888
#define SER_IP "192.168.117.60"
int main(int argc, const char *argv[])
{
//1.建立套接字文件
int cfd = -1;
cfd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == cfd){
perror("socket");
return -1;
}
printf("%d success cfd = %d\n",__LINE__,cfd);
//3.连接服务器
//3.1设置服务器地址信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
//3.2连接服务器
if(-1 == connect(cfd,(struct sockaddr *)&sin,sizeof(sin))){
perror("connect");
return -1;
}
printf("%d success connect\n",__LINE__);
//4.发送信息
//按键初始化
unsigned char buf_blue[5] = {0xff,0x2,0x1,0x0,0xff};
unsigned char blue=0x0;
char buf_red[5] = {0xff,0x2,0x0,0x0,0xff};
char red = 0x0;
while(1){
//输入
char key;
scanf("%c",&key);
while(getchar()!='\n');
switch(key){
case 'w':blue--;if(blue>180){blue++;break;}
printf("%d\n",__LINE__);
buf_blue[3]=blue;
send(cfd,buf_blue,sizeof(buf_blue),0);
break;
case 's':blue++;if(blue>0xb4){blue--;break;}
printf("%d\n",__LINE__);
buf_blue[3]=blue;
send(cfd,buf_blue,sizeof(buf_blue),0);
break;
case 'a':red--;if(red<-0x5a){red++;break;}
printf("%d\n",__LINE__);
buf_red[3]=red;
send(cfd,buf_red,sizeof(buf_red),0);
break;
case 'd':red++;if(red>0x5a){red--;break;}
printf("%d\n",__LINE__);
buf_red[3]=red;
send(cfd,buf_red,sizeof(buf_red),0);
break;
};
}
//5.关闭文件
close(cfd);
return 0;
}
2.TCP
客户端:
#include<myhead.h>
#define SER_IP "192.168.117.70"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{
//1.创建套接字文件
int sfd = -1;
if((sfd = socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
return -1;
}
printf("%d success: sfd == %d\n",__LINE__,sfd);
//2.绑定ip地址和域名
//2.1创建IP信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
if(-1 == bind(sfd,(struct sockaddr *)&sin,sizeof(sin))){
perror("bind error");
return -1;
}
printf("%d success:bind\n",__LINE__);
//3.开启监听功能
if(-1 == listen(sfd,128)){
perror("listen error");
return -1;
}
printf("%d success: listen\n",__LINE__);
//4.接受连接请求,创建新套接字
int newfd;
struct sockaddr_in cin;
socklen_t c_addrlen = sizeof(cin);
if(-1 == (newfd = accept(sfd,(struct sockaddr *)&cin,&c_addrlen))){
perror("accept error");
return -1;
}
printf("%d scuccess:accept\n",__LINE__);
//5.信息交互
char sbuf[100]="";
while(1){
//清空数组
bzero(sbuf,sizeof(sbuf));
//读取信息
int res = recv(newfd,sbuf,sizeof(sbuf)-1,0);
if(res == 0){
printf("客户端已下线\n");
break;
}
//sbuf[strlen(sbuf)-1]=0;
printf("[%s %d]>>>%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),sbuf);
//回复信息
strcat(sbuf,"*<*");
send(newfd,sbuf,strlen(sbuf),0);
}
//5.关闭文件
return 0;
}
服务端:
#include<myhead.h>
#define SER_IP "192.168.117.70"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{
//1.建立套接字文件
int cfd =-1;
if((cfd = socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket error");
return -1;
}
printf("%d success: cfd = %d\n",__LINE__,cfd);
//2.绑定IP和port(可有可无)
//3.发送请求
//3.1创建服务端ip信息结构体
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
//3.2尝试连接
if(-1 == connect(cfd,(struct sockaddr *)&sin,sizeof(sin))){
perror("connect error");
return -1;
}
printf("%d success: connect\n",__LINE__);
char cbuf[100]="";
while(1){
//存储信息
fgets(cbuf,sizeof(cbuf)-1,stdin);
cbuf[strlen(cbuf)-1]=0;
//把信息发送出去
send(cfd,cbuf,strlen(cbuf),0);
//清空数组 接受信息
bzero(cbuf,sizeof(cbuf));
recv(cfd,cbuf,sizeof(cbuf)-1,0);
printf("[%s %d]>>>%s\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port),cbuf);
printf("发送成功\n");
}
//5.关闭文件
close(cfd);
return 0;
}