网络编程,

2022 .7.6

山重水复疑无路,柳暗花明又一村。

127.0.0.1 本地回环系统

昨天操作了半天widonws找适配器啊,之类,想在起还是感觉到折磨,

现在好多了,昨天我们学习了网络编程的基础方面的知识,学了建立TCP客服端,服务器;

今天我们学习了DUP客服端服务器的建立并进行通信,咋不多说我先附上昨天以及今天的代码

TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。
UDP 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。

//TCP


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <strings.h>
#include <string.h>
int main(int argc, char *argv[])
{ 

/*   if(argc<3)
  {
        printf("input erro\n");
        return -1;
    }
    */
    //创建套接字
    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0){
        perror("socket");
        return -1;
    }
    printf("clien is succesful\n");
    //邦定
    struct sockaddr_in addr;//定义地质结构体用来存储ip和port
    addr.sin_family =AF_INET;//internet协议IPV4
    addr.sin_port   =htons(4399);//端口号
    addr.sin_addr.s_addr=inet_addr("127.0.0.1");

    //bind(sockdfd,(struct sockaddr *)&addr,sizeof(addr));
    //连接
    if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr))<0)

    {

        perror("connect");
        return -1;
    }
    printf("client connect is succesful\n");
    //发消息给服务端
    char buf[32]={0};
    while(1)
    {
        fgets(buf,32,stdin);
        int ret=send(sockfd,buf,sizeof(buf),0);
            if(ret==-1){

                perror("send");
                return -1;
            }

        printf("ret=%d\n",ret);
        if(!strncmp(buf,"qiut",4))
            return -1;
    }
    close(sockfd);




    return 0;
} 
#include <stdio.h>
#include<sys/socket.h>
#include <sys/types.h>
#include<string.h>
 #include <arpa/inet.h>
#include <unistd.h>

int main(int argc, char *argv[])
{ 
    //创建套接字
    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(-1==sockfd)
    {
        perror("socket");
        return -1;
    }
    printf("sockfd=%d\n",sockfd);
    //绑定套接字,IP地址;
    struct sockaddr_in addr;
    addr.sin_family =AF_INET;
    addr.sin_port   =htons(4399);
    addr.sin_addr.s_addr=inet_addr("0.0.0.0");
    if( bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)) <0 )
    {
        perror("bind");
        return -1;
    }
    //监听
    if( listen(sockfd,5)<0)
    {
        perror("listen");
        return -1;
    }
    printf("server init success \n server listening..\n");
    //连接套客服端

    struct sockaddr_in caddr;
    socklen_t len=sizeof(caddr);
    
    int connfd=accept(sockfd,(struct sockaddr *)&caddr,&len);
    if(connfd<0)
    {
        perror("accept");
        return -1;
    }
    
    //

    printf("clien ip: %s port: %u \n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port));
    
    char buf[32]={0};
    while(1)
    {
        bzero(buf,sizeof(buf));
        int ret=read(connfd,buf,sizeof(buf));
        if(ret<0){
            perror("read");
            return -1;
        }
        else if(ret==0){
            printf("client is leaved \n");
            break;
        }
        else{
            printf("ret:%d %s\n",ret,buf);
            if(!strncmp(buf,"qiut",4)){
                break;
            }else if(!strncmp(buf,"exit",4)){
                close(connfd);
                close(sockfd);
                return -1;
            }

        }
    }



    return 0;
} 

//UDP


#include <stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<string.h>
 #include <unistd.h>
int main(int argc, char *argv[])
{   
    if(argc<3)
    {
        printf("erro");
        return -1;
    }
    //创建套接字
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(sockfd==-1){
        perror("socket");
        return -1;
    }
    //绑定
    struct sockaddr_in addr;
    addr.sin_family     =AF_INET;
    addr.sin_port       =htons(atoi(argv[2]));
    addr.sin_addr.s_addr    =inet_addr(argv[1]);
    if(bind(sockfd,(struct sockaddr*)&addr,sizeof(addr))<0){
        perror("bind");
        return -1;
    }
    char buf[32]={0};

    struct sockaddr_in caddr;
    socklen_t len =sizeof(caddr);
    while(1){
        memset(buf,0,sizeof(buf));
        memset(&caddr,0,sizeof(caddr));
        int ret =recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&caddr,&len);
        if(ret<0){
            perror("recvfrom");
            continue;
        }
        printf("form:%s %u recv:%s \n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port),buf);
        //将数据发送到caddr指定的客户端
        int ret1=sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&caddr,sizeof(caddr));
        if(-1==ret1){
            perror("sendto");
            continue;
        }
        printf("send ret:%d\n",ret);

        if(!strncmp(buf,"exit",4))
            break;

    }
    close(sockfd);



    return 0;
} 

#include <stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>

int main(int argc, char *argv[])
{
    if(argc<3)
    {
        printf("erro");
        return -1;
    }
    //创建套接字
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(-1==sockfd)
    {
        perror("socket");
        return -1;
    }
    printf("sockfd=%d\n",sockfd);
    struct sockaddr_in dest_addr;
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(atoi(argv[2]));
    dest_addr.sin_addr.s_addr=inet_addr(argv[1]);//127.0.0.1
    //发信息给服务器

    char buf[32]={0};
    while(1)
    {
        memset(buf,0,sizeof(buf));
        fgets(buf,32,stdin);
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值