socket 简单传输

本文来源于:Linux下的socket演示程序
http://c.biancheng.net/view/2128.html


服务端代码(发送数据)


void testSocketSendData(){
    
    //创建套接字
    int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    /*
     socket() 函数确定了套接字的各种属性
     AF_INET 代表 ipv4, ipv6 是 AF_INET6
    SOCK_STREAM 代表面向连接的套接字
     IPPROTO_TCP 表示使用 TCP 协议;udp 是 IPPROTO_UDP;
    */
    
    //将套接字和IP、端口绑定
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
    serv_addr.sin_family = AF_INET;  //使用IPv4地址
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
    serv_addr.sin_port = htons(1234);  //端口
    
    bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); // 绑定,IP 地址和端口都保存在 sockaddr_in 结构体中
    
    /*
     进入被动监听状态,等待用户发起请求
     套接字一直处于“睡眠”中,直到客户端发起请求才会被“唤醒”
     */
    listen(serv_sock, 20);
    
    //接收客户端请求
    struct sockaddr_in clnt_addr;
    socklen_t clnt_addr_size = sizeof(clnt_addr);
    
    
    NSLog(@"-- wait to send");
    
    int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
    // 正常情况下,程序运行到 accept() 函数就会被阻塞,等待客户端发起请求。
     
    
    //向客户端发送数据
    char str[] = "http://c.biancheng.net/socket/";
    
    write(clnt_sock, str, sizeof(str)); // IO 操作
    
    NSLog(@"-- did send and close");
    
    //关闭套接字(和普通文件一样,socket 在使用完毕后也要用 close() 关闭)
    close(clnt_sock);
    close(serv_sock);

}

客户端代码(接收数据)


void testSocketRecieveData(){
    //创建套接字
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    
    //向服务器(特定的IP和端口)发起请求
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
    serv_addr.sin_family = AF_INET;  //使用IPv4地址
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
    serv_addr.sin_port = htons(1234);  //端口
    
    /*
     通过 connect() 向服务器发起请求,服务器的IP地址和端口号保存在 sockaddr_in 结构体中。
     直到服务器传回数据后,connect() 才运行结束。
     */
    connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
    
    //读取服务器传回的数据
    char buffer[40];
    read(sock, buffer, sizeof(buffer)-1);  // 通过 read() 从套接字文件中读取数据。
    
    printf("Message form server: %s\n", buffer);
    
    //关闭套接字
    close(sock);
}

发布了14 篇原创文章 · 获赞 1 · 访问量 973

猜你喜欢

转载自blog.csdn.net/weixin_45390999/article/details/103182728