网络编程day2 作业

编程入门 行业动态 更新时间:2024-10-08 06:25:02

网络编程day2 <a href=https://www.elefans.com/category/jswz/34/1771149.html style=作业"/>

网络编程day2 作业

潘小胆(2807488604) 2023/7/5 下午 5:13:11
作业:

  1. 将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;
}

  1. 自行编写一个客户端代码,能够操作红色手臂移动到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;
}

  1. 附加题:通过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 作业

本文发布于:2024-02-06 14:32:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749442.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作业   网络编程

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!