b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

udp, tcp, unix socket通信箭子

电脑杂谈  发布时间:2019-12-30 23:01:41  来源:网络整理

java socket udp_c socket udp_c#udp socket编程

UDP的程衅可以分成客户端和服嗡两钢。两者的诸壁对地址的隘数c socket udp,客户端可以不用进行地质和端口的埃(客户端是随机拿一岗1024的端口去连接的)

和TCP相比c socket udp,UDP缺少connect(),listen(),accept()函数 【襝p面嫌,而UDP是无连接的。】

服文UDP编程:

动議>函数

创建

socket()

?td>bind()

发送

sendto()

接收

recvfrom()

关闭

c socket udp_java socket udp_c#udp socket编程

close()

客户端和服梧比没有癷nd()的步骤。

服文recvfrom是阻塞的,直到接收至数据。

关键词:数据包套接字,套接字文件描剩

socket常见的套接字类型:

- AF_INET(又称 PF_INET)是IPv4网络协议的套接字类型

- AF_INET6 是IPv6网络协议的套接字类型

- AF_UNIX 蕁ix系统本地通信

socket常见的套接字选项:

SOCK_STREAMSOCK_DGRAM

数据羋>数据包

有保障

c#udp socket编程_java socket udp_c socket udp

无保障

面嫌

面犀接

TCP/IP

    int s=socket(AF_INET,SOCK_DGRAM,0);
    if(s==-1){
        perror("create socket: ");
        return -1;
    }
    struct sockaddr serv;
    serv.sin_family=AF_INET;   
    serv.sin_addr.s_addr=htol(INADDR_ANY);  // 任意本地IP,网络字节序
    serv.sin_port=htos(PORT);  //网络字节序
    bind(s,(struct sockaddr*)&serv,sizeof(serv));  //白接字和地址

解释“白接字跟地址”,实质上是指猛数据的IP和端口。

它们的联系:

编写一腹用udp通信,client是10.21.1.142, server是10.21.1.229,port是3000. client发送end能并且程续。

客户端:

#include 
#include 
#include 
#include 
#include 
#include 
#define PORT 3000
int main(){ 
        int s=socket(AF_INET,SOCK_DGRAM,0);
        if(s==-1){
             perror("create socket error: ");
             exit(1);
        }
        struct sockaddr_in serv;
        bzero(&serv,sizeof(serv));
        serv.sin_family=AF_INET;   
        serv.sin_addr.s_addr = inet_addr("10.21.1.229");    //htol(INADDR_ANY); 
        serv.sin_port=htons(PORT);
        char buff[105];
        int ret;
        while(1){
             ret=read(STDIN_FILENO,buff,105);
             if(ret==-1){
                  perror("read error: ");
                  break;
             }
             buff[ret]=0;
             sendto(s,buff,strlen(buff),0,(struct sockaddr *)&serv,sizeof(serv));
             if(strcmp(buff,"end\n")==0){
                  printf("client process end.\n");
                  break;
             }
             int addr_len=sizeof(serv);
             if((ret=recvfrom(s,buff,105,0,(struct sockaddr *)&serv,&addr_len))==-1){
                  perror("recvform error: ");
                  break;
             }
             buff[ret]=0;
             printf("receive message from server: %s",buff);
        }
        close(s);
        return 0;
}

服魏

#include 
#include 
#include 
#include 
#include 
#include 
#define PORT 3000
int main(){ 
    int s=socket(AF_INET,SOCK_DGRAM,0);
        if(s==-1){
        perror("create socket error: ");
        exit(1);
    }
    struct sockaddr_in serv,client;
    bzero(&serv,sizeof(serv));
    serv.sin_family=AF_INET;   
    serv.sin_addr.s_addr=inet_addr("10.21.1.229");//htol(INADDR_ANY); 
    serv.sin_port=htons(PORT);  //网络字节序
    if(bind(s,(struct sockaddr*)&serv,sizeof(serv))==-1){//白接字和地址
        perror("bind error: ");
        exit(1);
    }
    while(1){
        char buff[105];
        int addr_len=sizeof(client);
        int ret=recvfrom(s,buff,105,0,(struct sockaddr *)&client,&addr_len); // once success, we get client.
        if(ret==-1){
            perror("recvfrom error: ");
            break;
        }
        buff[ret]=0;
        if(strcmp(buff,"end\n")==0){
            printf("server process end.\n");
            break;
        }
        printf("receive message from client: %s",buff);
            ret=read(STDIN_FILENO,buff,sizeof(buff));
        if(ret<0){
            perror("read error: ");
            break;
        }
        if(sendto(s,buff,ret,0,(struct sockaddr *)&client,addr_len)==-1){
            perror("sendto error: ");
            break;
        }
    }
    close(s);
    return 0;
}

java socket udp_c#udp socket编程_c socket udp

会话:

$ ./udp1 
hello, I'm client
receive message from server: I'm server, I got message.
oh, congratulation.
receive message from server: hahaha
end
client process end.
$ ./udp1 
receive message from client: hello, I'm client
I'm server, I got message.
receive message from client: oh, congratulation.
hahaha
server process end.

通用的套接字地址

struct sockaddr
{
unsigned short int sa_family;
char sa_data[14];
};

用户跟内核进行数据交互:

得到数据: recv(), accept()

传入数据: send(), bind()

表示地址长度的参数在得到数据的变量中是传地址的, 而在传入数据的变量垣值的. (对比accept和bind就明白这是正确的.)

tcp server and client work as:

编写tcp socket通信例子, 分为客户端和服慰分,当客户端发送”end”时,结束程衦 />tcp_server.c:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
const int port = 3000;
const int MAX = 10; /* biggest number of connected clients */
const char IP[] = "192.168.123.4";
int main(){
    int server_fd=socket(AF_INET,SOCK_STREAM,0);
    if(server_fd == -1){
        perror("socket: ");
        return -1;
    }
    struct sockaddr_in server;
    bzero(&server,sizeof(server));
    server.sin_family=AF_INET;
    server.sin_addr.s_addr=htonl(INADDR_ANY); //inet_addr(IP);   /*  both ways are ok. */
    server.sin_port=htons(port);
    if(bind(server_fd,(struct sockaddr *)&server,sizeof(server))==-1){
        perror("bind: ");
        return -1;
    }
    if(listen(server_fd,MAX) == -1){
        perror("listen: ");
        return -1;
    }
    struct sockaddr_in client;
    int client_len=sizeof(client);
    int conn = accept(server_fd, (struct sockaddr *)&client, &client_len); 
    if(conn == -1){
        perror("accept: ");
        return -1;
    }
    char buff[105];
    while(1){
        memset(buff,0,sizeof(buff));
        if(read(conn,buff,sizeof(buff)) == -1){
            perror("read: ");
            break;
        }
        if(strcmp(buff,"end\n") == 0){
            puts("the server process end. ");
            break;
        }
        printf("recv message from client: %s", buff);
        memset(buff,0,sizeof(buff));
        if(read(STDIN_FILENO,buff,sizeof(buff)) == -1){
            perror("read: ");
            break;
        }
        if(write(conn,buff,strlen(buff)) == -1){
            perror("send: ");
            break;
        }
    }
    close(conn);
    close(server_fd);
    return 0;
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-135250-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 神颖
      神颖

      看上去听上去是有道理

    • 王昂
      王昂

      天王老子保护地也能炸个片甲不留

    • 罗志祥
      罗志祥

      索赔金额高

    热点图片
    拼命载入中...