网络编程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和PORT
    struct 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);
    //关闭sfd
    close(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和PORT
    struct 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);
    }
    }
    //关闭cfd
    close(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){
        //P
        sem_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;
        }
        //V
        sem_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){
        //p
        sem_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;
        }
        //V
        sem_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题上交

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值