socket编程

cooolr 于 2021-10-24 发布

server.c

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8080

int main() {
  // 定义所需变量
  int socket_desc, client_sock;
  struct sockaddr_in server, client;
  int addrlen = sizeof(client);
  int read_size;
  char client_message[2048] = {'\0'};
  // 创建socket连接
  socket_desc = socket(AF_INET, SOCK_STREAM, 0);
  // 设置服务端IP协议、监听地址、端口
  server.sin_family = AF_INET;
  server.sin_addr.s_addr = INADDR_ANY;
  server.sin_port = htons(PORT);
  // Bind绑定服务端socket连接
  if ( bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0 ) {
      return 1;
  }
  // Listen监听socket连接
  listen(socket_desc, 8);
  // Accept接受socket连接
  while ( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&addrlen)) ) {
      // 从客户端接收消息
      while ( (read_size = recv(client_sock, client_message, sizeof(client_message), 0)) > 0 ) {
        // 字符串连接null字符
        strcat(client_message, "\0");
        printf("receive: %s\n", client_message);
        // 发送消息给客户端
        write(client_sock, client_message, strlen(client_message));
        printf("send back: %s\n", client_message);
        // 重置client_message
        memset(client_message, "\0", sizeof(client_message));
      }
      // 关闭客户端连接
      close(client_sock);
  }
  return 0;
}

client.c

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8080

int main() {
    // 定义所需变量
    int server_sock;
    struct sockaddr_in server;
    int addrlen = sizeof(server);
    char *message = "hello world";
    char server_message[2048] = {'\0'};
    // 创建socket连接
    server_sock = socket(AF_INET, SOCK_STREAM, 0);
    // 设置服务端IP协议、连接地址、端口
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_port = htons(PORT);
    // 连接服务端
    connect(server_sock, (struct sockaddr *)&server, sizeof(server));
    // 发送消息给服务端
    send(server_sock, message, strlen(message), 0);
    // 接收服务器消息
    recv(server_sock, server_message, sizeof(server_message), 0);
    // 字符串连接null字符
    strcat(client_message, "\0");
    printf("receive: %s\n", server_message);
    // 关闭socket连接
    close(server_sock);
    return 0;
}