0517_网络编程2

练习1:

实现tcp的服务端客户端通信
1.服务端.c

#include <myhead.h>
#define SER_IP "192.168.0.113"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{
    //建立套接字端点
    int sfd=socket(AF_INET,SOCK_STREAM,0);
    if(sfd==-1){
        perror("socket error");
        return -1;
    }
    printf("socket success\n");
    //填充服务端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);/*主机ip转换为整数*/

    //绑定
    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){
        perror("bind error");
        goto _EXIT;
    }
    printf("bind success\n");

    //监听
    if(listen(sfd,128)==-1){
        perror("listen error");
        goto _EXIT;
    }
    printf("listen success\n");

    //等待连接
    //创建新的信息结构体用于通信
    struct sockaddr_in cin;
    socklen_t len=sizeof(cin);
    int new_sfd=accept(sfd,(struct sockaddr *)&sin,&len);
    if(new_sfd==-1){
        perror("accept error\n");
        goto _EXIT;
    }
    printf("[%s:%d]accept success\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));
    //数据接收\返回
    char rbuf[128]="";
    while(1){
        bzero(rbuf,sizeof(rbuf));/*初始化字符数组*/
        int retval=recv(new_sfd,rbuf,sizeof(rbuf),0);
        if(retval==0){
            perror("recv error");
            break;
        }
        printf("已成功接收:%s\n",rbuf);
        strcat(rbuf,":");
        if(send(new_sfd,rbuf,strlen(rbuf),0)==-1){
            perror("send error");
            goto _EXIT;
        }
        printf("发送成功\n");
    }
    printf("客户端已断开连接\n");                                                                                                       
_EXIT:
    close(sfd);
    close(new_sfd);
    return 0;
}
                                                                                                                                        
                                                                                                                                        

客户端.c

#include <myhead.h>
#define SER_IP "192.168.0.113"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{
    //建立套接字端点
    int sfd=socket(AF_INET,SOCK_STREAM,0);
    if(sfd==-1){
        perror("socket error");
        return -1;
    }
    printf("socket success\n");
    //填充需要链接的服务端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);/*主机ip转换为整数*/

    //讲给定的套接字链接到给定的地址信息主机上
    if(connect(sfd,(struct sockaddr *)&sin,sizeof(sin))==-1){
        perror("connect error");
        goto _EXIT;
    }
    printf("connect success\n");

    //数据接收\发送
    char rbuf[128]="";
    char wbuf[128]="";
    while(1){
        bzero(rbuf,sizeof(rbuf));/*初始化字符数组*/
        bzero(wbuf,sizeof(wbuf));                                                                
        fgets(wbuf,sizeof(wbuf),stdin);
        wbuf[strlen(wbuf)-1]=0;
        if(send(sfd,wbuf,strlen(wbuf),0)==-1){
            perror("send error");
            goto _EXIT;
        }
        printf("发送成功\n");
        if(recv(sfd,rbuf,sizeof(rbuf),0)==-1){
            perror("recv error");
            goto _EXIT;
        }
        printf("接收成功:%s\n",rbuf);

    }
_EXIT:
    close(sfd);
    return 0;
}
                                                                                                 
                                                                                                 
                                                                                                 
                                                                                                 

练习2:

实现UDP客户端服务端通信

服务端.c

 #include <myhead.h>
 #define SRE_PORT 9999
 #define SRE_IP "192.168.125.140"
 int main(int argc, const char *argv[])
 {
     int cfd =socket(AF_INET,SOCK_DGRAM,0);
     if(cfd==-1){
         perror("socket error");
         return -1;
     }
     printf("socket success\n");
 
     struct sockaddr_in sin;
     sin.sin_family=AF_INET;
     sin.sin_port=htons(SRE_PORT);
     sin.sin_addr.s_addr=inet_addr(SRE_IP);
     if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){
         perror("bind error");
         return -1;
     }
     char rbuf[128]="";
     socklen_t nsin=sizeof(sin);
     while(1){
         bzero(rbuf,sizeof(rbuf));
         recvfrom(cfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&nsin);
         printf("------%s\n",rbuf);
         strcat(rbuf,"*_*");
         if(sendto(cfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&sin,sizeof(sin))==-1){
             perror("sendto error");
             return -1;
         }
         printf("sendto success\n");
     }
     close(cfd);
     
     return 0;
 }                                                                                                          
                                                                                                            

客户端.c

#include <myhead.h>
#define SRE_PORT 9999
#define SRE_IP "192.168.125.140"
int main(int argc, const char *argv[])
{
    int cfd =socket(AF_INET,SOCK_DGRAM,0);
    if(cfd==-1){
        perror("socket error");
        return -1;
    }
    printf("socket success\n");

    struct sockaddr_in sin;
    sin.sin_family=AF_INET;
    sin.sin_port=htons(SRE_PORT);
    sin.sin_addr.s_addr=inet_addr(SRE_IP);
    char rbuf[128]="";
    char wbuf[128]="";
    while(1){
        bzero(rbuf,sizeof(rbuf));
        bzero(wbuf,sizeof(wbuf));
        fgets(wbuf,sizeof(wbuf),stdin);
        wbuf[strlen(wbuf)-1]=0;
        if(sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&sin,sizeof(sin))==-1){
            perror("sendto error");
            return -1;
        }
        printf("sendto success\n");
        if(recvfrom(cfd,rbuf,sizeof(rbuf),0,NULL,NULL)==-1){
            perror("recvfrom error");
            return -1;
        }
        printf("recvfrom success:%s\n",rbuf);
    }
    close(cfd);                                                                            

    return 0;
}
                                                                                           

思维导图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值