linux网络服务器

8 篇文章 0 订阅

在本次中,学习了一个简单的基于TCP/IP的服务器/客户端。在例子中,利用的是AF_INET域。在linux下,最常用就是AF_INET,AF_UNIX. AF_UNIX是linux文件系统实现的本地要借字。后面的是可以用于包括英特网在内的TCP/IP网络通信的程序。

下面来看一个简单的基于TCP/IP的程序例子:

#include <iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<sys/un.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<stdlib.h>
using namespace std;

//一个简单的客户端程序
int main()
{

    int sockfd;
    int len;
    struct sockaddr_in address;
    int result;
    char ch = 'A';


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


    //根据服务器的情况给套接子命名
//    address.sun_family = AF_UNIX;
//    strcpy(address.sun_path , "server_socket");
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    address.sin_port = 7777;
    len = sizeof(address);

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

    if(result == -1){
        perror("oops: client1");
        exit(1);
    }

    //现在可以对套接字进行读写操作啦
    write(sockfd , &ch , 1);
    read(sockfd , &ch , 1);
    printf("char from server= %c\n" , ch);
    close(sockfd);
    return 0;
}

服务器端:

#include <iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<sys/un.h>
#include<unistd.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
using namespace std;

int main()
{
    int server_sockfd , client_sockfd;
    int server_len , client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;
    //删除以前的套接字,wier服务器创建一个未命名的套接字
    unlink("server_socket");
    server_sockfd =socket(AF_INET , SOCK_STREAM , 0);

    //命令套接子:
//    server_address.sun_family = AF_UNIX;
//    strcpy(server_address.sun_path , "server_socket");
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7777;

    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 , (socklen_t*)&client_len);

        //对client_sockfd套接字进行读写操作
        read(client_sockfd , &ch , 1);
        ch++;
        write(client_sockfd , &ch , 1);
        close(client_sockfd);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值