作业"/>
网络编程day2 作业
潘小胆(2807488604) 2023/7/5 下午 5:13:11
作业:
- 将TCP的服务器客户端重新写一遍
2服务器:
#include <myhead.h>
#define PORT 8070
#define IP "192.168.174.130"
int main(int argc, const char *argv[])
{//创建套接字int sfd = socket(AF_INET,SOCK_STREAM,0);if(sfd == -1)PRI_ERR("socket err");//bind绑定//1.创建服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);//将端口号的主机字节序转为网络字节序sin.sin_addr.s_addr = inet_addr(IP);//将IP地址转换为网络字节序//2.调用bind函数绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)PRI_ERR("bind err");//listen转为被动监听模式if(listen(sfd,128)==-1)PRI_ERR("listen err"); //accept为客户端创建新的套接字文件描述符//1.创建client地址信息结构体接受client的IP和PORTstruct sockaddr_in cin;socklen_t len = sizeof(cin);int nfd = accept(sfd,(struct sockaddr*)&cin,&len);if(nfd == -1)PRI_ERR("accept err"); char buf[128]="";while(1){memset(buf,0,sizeof(buf));//接受数据int ret = recv(nfd,buf,sizeof(buf),0);if(ret < 0)PRI_ERR("recv err");else if(ret==0)PRI_ERR("客户端断开");else{printf("接收到%s.%d:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);}//发送数据memset(buf,0,sizeof(buf));strcpy(buf,"hello client");if(send(nfd,buf,sizeof(buf),0)==-1)PRI_ERR("send err");}close(nfd);//关闭sfdclose(sfd);return 0;
}
.
客户端:
#include <myhead.h>
#define PORT 8070
#define IP "192.168.174.130"
int main(int argc, const char *argv[])
{//创建套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd == -1)PRI_ERR("socket err");//连接到server//先创建地址信息结构体记录client的IP和PORTstruct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(PORT);cin.sin_addr.s_addr = inet_addr(IP);//连接到if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)PRI_ERR("connect err");char buf[128]="";while(1){//发送数据sleep(3);memset(buf,0,sizeof(buf));strcpy(buf,"hello server");if(send(cfd,buf,sizeof(buf),0)==-1)PRI_ERR("send err");memset(buf,0,sizeof(buf));//接受数据int ret = recv(cfd,buf,sizeof(buf),0);if(ret < 0)PRI_ERR("recv err");else if(ret==0)PRI_ERR("服务器断开");else{printf("接收到:%s\n",buf);}}//关闭cfdclose(cfd);return 0;
}
- 自行编写一个客户端代码,能够操作红色手臂移动到16度
#include <myhead.h>
#define IP "192.168.10.129"
#define PORT 7979
int main(int argc, const char *argv[])
{//创建套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){PRI_ERR("socket error");}//绑定(不必须)//连接服务器//1创建server的地址信息结构体,填充信息struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(PORT);//server端口号的网络字节序cin.sin_addr.s_addr = inet_addr(IP);//serverIP的网络字节序if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){PRI_ERR("connect error");}printf("connect success\n");//发送消息unsigned char hex[5] = {0xff,0x02,0x01,0x10,0xff};if(send(cfd,hex,sizeof(long),0)==-1){PRI_ERR("send error");}printf("send success\n");//接收消息char buf[128]="";if(recv(cfd,buf,sizeof(buf),0)==-1)PRI_ERR("recv error");//关闭套接字文件close(cfd);return 0;
}
- 附加题:通过wasd按键控制机械臂,ws控制红色手臂加减,da控制蓝色手臂加减
#include <myhead.h>
#define IP "192.168.10.129"
#define PORT 7979
sem_t semr,semb;
void * task1(void *arg)
{//先将两只手臂恢复原位unsigned char hex[5] = {0xff,0x02,0x00,0x00,0xff};int cfd = *(int*)arg;send(cfd,hex,sizeof(hex),0);while(1){//Psem_wait(&semb);char key = getchar();getchar();printf("key = %c\t",key);switch(key){case 'w': {hex[3]+=0x01;send(cfd,hex,sizeof(hex),0);}break;case 's': {hex[3]-=0x01;send(cfd,hex,sizeof(hex),0);}break;}//Vsem_post(&semr);}}
void * task2(void *arg)
{//先将两只手臂恢复原位unsigned char hex[5] = {0xff,0x02,0x01,0x00,0xff};int cfd = *(int*)arg;send(cfd,hex,sizeof(hex),0);while(1){//psem_wait(&semr);char key = getchar();getchar();printf("key = %c\t",key);switch(key){case 'd': {hex[3]+=0x01;send(cfd,hex,sizeof(hex),0);}break;case 'a': {hex[3]-=0x01;send(cfd,hex,sizeof(hex),0);}break;}//Vsem_post(&semb);}
}
int main(int argc, const char *argv[])
{//创建套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){PRI_ERR("socket error");}//绑定(不必须)//连接服务器//1创建server的地址信息结构体,填充信息struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(PORT);//server端口号的网络字节序cin.sin_addr.s_addr = inet_addr(IP);//serverIP的网络字节序if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){PRI_ERR("connect error");}printf("connect success\n");//创建多线程pthread_t tid1,tid2;if(pthread_create(&tid1,NULL,task1,&cfd))PRI_ERR("tid1 err");if(pthread_create(&tid2,NULL,task2,&cfd))PRI_ERR("tid1 err");//初始化信号量sem_init(&semr,0,1);sem_init(&semb,0,0);while(1){}pthread_join(tid1,NULL);pthread_join(tid2,NULL);//关闭套接字文件close(cfd);//销毁信号量sem_destroy(&semr);sem_destroy(&semb);return 0;
}
. 通过配网视屏重新配置一下网络
潘小胆(2807488604) 2023/7/5 下午 5:13:22
第1题 第2题上交
更多推荐
网络编程day2 作业
发布评论