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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
// 输出错误并且向操作系统返回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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
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.19190端口然后就看到了string from server:Welcome to Our Server!这句话。
在这里插入图片描述

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 服务器