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

udp, tcp, unix socket通信箭子(2)

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

tcp_client.c:

java socket udp_c socket udp_c#udp socket编程

#include 
#include 
#include 
#include 
#include 
#include 
#include 
const int port = 3000;
const int MAX = 10; /* biggest number of client_fdected clients */
const char IP[] = "192.168.123.4";
int main(){
    int client_fd=socket(AF_INET,SOCK_STREAM,0);
    if(client_fd == -1){
        perror("socket: ");
        return -1;
    }
    struct sockaddr_in server;
    bzero(&server,sizeof(server));
    server.sin_family=AF_INET;
    server.sin_addr.s_addr=inet_addr(IP);
    server.sin_port=htons(port);
    if(connect(client_fd,(struct sockaddr *)&server,sizeof(server))==-1){
        perror("client_fdect: ");
        return -1;
    }
    char sends[105],recvs[105];
    while(1){
        read(STDIN_FILENO,sends,sizeof(sends));
        if(send(client_fd,sends,strlen(sends),0)==-1){
            perror("send: ");
            break;
        }
        if(strcmp(sends,"end\n") == 0){
            puts("the client end.");
            break;
        }
        memset(recvs,0,sizeof(recvs));
        if(read(client_fd,recvs,sizeof(recvs))==-1){
            perror("recv: ");
            break;
        }
        printf("recv message from server: %s",recvs);
        memset(sends,0,sizeof(sends));
    }
    close(client_fd);
    return 0;
}

会话:

./tcps
recv message from client: hello
I got your message.
recv message from client: ok, every thins seems good.
client, we works.
the server process end.
./tcpc
hello
recv message from server: I got your message.
ok, every thins seems good.
recv message from server: client, we works.
end
the client end.

Unix娱族用于同一台窒客户机、服唯信。

Unix咏种类型的套接字:字节劣字(类似于tcp)、数据包套接字(类似于udp)。

Unix佑字的存储速度是tcp的两倍。

Unix佑字跟传统套接字相比,他是用模式名来表示协议族的描蔮r />Unix邮结构:

#define UNIX_PATH_MAX   108
struct sockaddr_un {
    __kernel_sa_family_t sun_family; /* AF_UNIX */
    char sun_path[UNIX_PATH_MAX];   /* pathname */
};

sun_family: AF_UNIX (known as AF_LOCAL)

sun_path: 必须是绝对路径,文件默认访问权限是0777

一抚端和服唯信(本地)的举例. 当客户端发送end时,结束会话.

un_sock_serv.c:

#include 
#include 
#include 
#include 
#include 
const char path[]="/tmp/server";
int main(){
    int server_fd,client_fd;
    struct sockaddr_un server_addr, client_addr;
    unlink(path);
    server_fd = socket(AF_UNIX,SOCK_STREAM,0);
    if(server_fd == -1){
        perror("socket: ");
        exit(1);
    }
    server_addr.sun_family=AF_UNIX;
    strcpy(server_addr.sun_path,path);
    if(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(server_addr))==-1){
        perror("bind: ");
        exit(1);
    }
    listen(server_fd,10);  //server listen most 10 requests.
    puts("server is listening: ");
    int client_len=sizeof(client_addr);
    client_fd=accept(server_fd,(struct sockaddr *)&client_addr,(int *)&client_len);
    if(client_fd == -1){
        perror("accept: ");
        exit(1);
    }
    char recv[105], send[105];
    int i;
    while(1){
        memset(recv,0,sizeof(recv));
        if(read(client_fd,recv,105)==-1){
            perror("read: ");
            break;
        }
        if(strcmp(recv,"end\n")==0){
            printf("the server process end.\n");
            break;
        }
        printf("recv message from client: %s",recv);
        memset(send,0,sizeof(send));
        if(read(STDIN_FILENO,send,sizeof(send))==-1){
            perror("read: ");
            break;
        }
        if(write(client_fd,send,strlen(send))==-1){
            perror("write: ");
            break;
        }
    }
    close(server_fd);
    unlink(path);
}

un_sock_client.c:

#include 
#include 
#include 
#include 
#include 
const char path[]="/tmp/server";
int main(){
    int server_fd,client_fd;
    struct sockaddr_un server_addr, client_addr;
    //unlink(path);
    server_fd = socket(AF_UNIX,SOCK_STREAM,0);
    if(server_fd == -1){
        perror("socket: ");
        exit(1);
    }
    server_addr.sun_family=AF_UNIX;
    strcpy(server_addr.sun_path,path);
    if(connect(server_fd,(struct sockaddr *)&server_addr,sizeof(server_addr)) == -1){
        perror("connect: ");
        exit(1);
    }
    char recv[105],send[105];
    int i;
    puts("the client started, please enter your message: ");
    while(1){
        memset(send,0,sizeof(send));
        if(read(STDIN_FILENO,send,105)==-1){
            perror("read: ");
            break;
        }
        if(write(server_fd,send,strlen(send))==-1){
            perror("send: ");
            break;
        }
        if(strcmp(send,"end\n")==0){
            printf("the client process end.\n");
            break;
        }
        memset(recv,0,sizeof(recv));
        if(read(server_fd,recv,105)==-1){
            perror("recv: ");
            break;
        }
        printf("recv message from server: %s",recv);
    }
    close(server_fd);
    unlink(path);
    return 0;
}

会话:


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

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

    • 伍超
      伍超

      犯军规也要打掉它

    • 亚米拉
      亚米拉

      舍己为人的精神值得全世界学习

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