服务器往客户端发送字符串的网络编程

服务器主要就是能够打开命令行提供的网络端口,然后一有客户端连接上,就会向客户端发送Welcome to Our Server!这段话。
服务器代码serverSayWelcome.c的代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
// 输出错误并且向操作系统返回1,退出程序
void errorPrint(char *errorMessage);


int main(int argc,char *argv[]){
    // 服务器的套接字
    int serverSocket;
    // 客户端的套接字
    int clientSocket;

    // 服务器的地址结构
    struct sockaddr_in serverAddress;
    // 客户端的地址结构
    struct sockaddr_in clientAddress;
    // 客户端地址大小
    socklen_t clientAddress_size;

    // 输出到客户端的字符串
    char stringToClient[] = "Welcome to Our Server!";

    // 命令行需要输入两个参数,第二个参数需要输入端口号
    if(argc!=2){
        printf("%s needs a port!\n",argv[0]);
        exit(1);
    }
    
    // 获取服务器端的套接字
    serverSocket = socket(PF_INET,SOCK_STREAM,0);

    // 若是serverSocket等于-1,就说明出错了,需要输出"socket() wrong!"退出程序
    if(serverSocket==-1){
        errorPrint("socket() wrong!");
    }

    // 把serverAddress所有字节都填充为0
    memset(&serverAddress,0,sizeof(serverAddress));

    // 把sockaddr_in的值初始化
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
    serverAddress.sin_port = htons(atoi(argv[1]));
    
    // 把地址和端口都绑定在操作系统上边,要是失败的话,会输出错误信息,退出程序
    if(bind(serverSocket,(struct sockaddr*)&serverAddress,sizeof(serverAddress))==-1){
            errorPrint("bind() wrong!");
    }

    // 把主动套接字变成被动套接字,能够监听其他主机发起连接,失败的话,会输出错误信息,退出程序
    if(listen(serverSocket,5)==-1){
         errorPrint("listen() wrong!");
    }
    
    // 把客户端地址大小clientAddress_size初识化
    clientAddress_size = sizeof(clientAddress);
    // 接受到其他用户的连接,
    clientSocket = accept(serverSocket,(struct sockaddr*) &clientAddress,&clientAddress_size);
    
    // 出错之后,会输出报错信息,退出程序
    if(clientSocket==-1){
         errorPrint("accept() wrong!");
    }
    
    // 向客户端输出“Welcome to Our Server!”
    write(clientSocket,stringToClient,sizeof(stringToClient));
    // 关闭客户端套接字
    close(clientSocket);
    // 关闭服务器套接字
    close(serverSocket);
    return 0;
}

void errorPrint(char *errorMessage){
    fputs(errorMessage,stderr);
    fputc('\n',stderr);
    exit(1);
}

gcc serverSayWelcome.c -o serverSayWelcome进行编译,./serverSayWelcome 9190打开9190端口等待客户端连接。
在这里插入图片描述

客户端就会连接服务器,然后把string from server:连上服务器发送过来的Welcome to Our Server!字符串输出。
客户端代码clientGetWelcome.c的代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
void errorPrint(char *errorMessage);

int main(int argc,char *argv[]){
    int socketNumber;
    struct sockaddr_in serverAddress;
    char getString[100];
    int stringLength;
    if(argc!=3){
        printf("server IP or port lacks!\n",argv[0]);
        exit(1);
    }

    socketNumber = socket(PF_INET,SOCK_STREAM,0);

    if(socketNumber==-1){
        errorPrint("socket() is wrong!");
        exit(1);
    }

    memset(&serverAddress,0,sizeof(serverAddress));

    serverAddress.sin_family=AF_INET;
    serverAddress.sin_addr.s_addr=inet_addr(argv[1]);
    serverAddress.sin_port=htons(atoi(argv[2]));

    if(connect(socketNumber,(struct sockaddr*)&serverAddress,sizeof(serverAddress))==-1){
            errorPrint("connect() wrong!");
    }

    stringLength = read(socketNumber,getString,sizeof(getString)-1);
    if(stringLength==-1){
         errorPrint("read() is wrong!");
    }

    printf("string from server:%s\n",getString);
    close(socketNumber);
    return 0;
}


void errorPrint(char *errorMessage){
    fputs(errorMessage,stderr);
    fputc('\n',stderr);
    exit(1);
}

gcc clientGetWelcome.c -o clientGetWelcome进行编译,./clientGetWelcome 127.0.0.1 9190连接到本机(127.0.0.1)的9190端口,然后就看到了string from server:Welcome to Our Server!这句话。
在这里插入图片描述

而服务端也退出了程序。
在这里插入图片描述

此文章为11月Day 9学习笔记,内容来源于极客时间《网络编程实战》。

你可能感兴趣的:(网络编程实战,网络,服务器,tcp/ip)