现在的位置: 首页 > 综合 > 正文

Linux套接字实现简单的客户/服务器网络通信示例

2018年03月18日 ⁄ 综合 ⁄ 共 1652字 ⁄ 字号 评论关闭

客户程序 client3.c ,它通过网络连接到一个网络套接字。

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

int main()
{
    int sockfd;
    int len;
    struct sockaddr_in address;
    int result;
    char ch = 'A';

    //为客户创建一个套接字
    sockfd = socket( AF_INET, SOCK_STREAM, 0 );

    //根据服务器的情况给套接字命名
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    address.sin_port = htons(9734);
    len = sizeof( address );

    //将客户的套接字连接到服务器的套接字
    result = connect( sockfd, (struct sockaddr *)&address, len );

    if( -1 ==result ) {
        perror("oops: client1");
        exit( 1 );
    }
    //通过sockfd进行读写操作
    write( sockfd, &ch, 1 );
    read( sockfd, &ch, 1 );
    printf("char from server = %c\n", ch );
    close( sockfd );
    exit(0);
}

网络服务器程序 server3.c ,让它在选好的端口撒谎那个等待客户的连接。

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

int main()
{
    int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_in server_address, client_address;
    unlink( "server_socket" );

    //为服务器创建一个未命名套接字
    server_sockfd = socket( AF_INET, SOCK_STREAM, 0 );

    //命名套接字
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htonl( INADDR_ANY );  //允许到达服务器任一网络接口的连接
    server_address.sin_port = htons(9734);
    server_len = sizeof( server_address );
    bind( server_sockfd, (struct sockaddr *)&server_address, server_len );
   
    //创建监听队列
    listen( server_sockfd, 5 ) ;
    while( 1 ) {
        char ch;
        printf("server waiting\n");
        client_len = sizeof( client_address );
        client_sockfd = accept( server_sockfd, (struct sockaddr *)&client_address, &client_len);

        read( client_sockfd, &ch, 1 );
        ch++;
        write( client_sockfd, &ch, 1 );
        close( client_sockfd );
    }
    exit( 1 );
}

运行结果:

[zhang@localhost document]$ ./server3 & ./client3
[1] 6012
server waiting
server waiting
char from server = B

抱歉!评论已关闭.