最简版本

简介: 最简版本

服务端相同, TCP 客户端的最简版本也只需要一个 sys/socket 库即可,如下所示:

#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#define SERVER_PORT 6666
/*
连接到服务器后,会不停循环,等待输入,
输入quit后,断开与服务器的连接
*/
int main() {
  //客户端只需要一个套接字文件描述符,用于和服务器通信
  int clientSocket;
  //描述服务器的socket
  struct sockaddr_in serverAddr;
  char sendbuf[200];
  char recvbuf[200];
  int iDataNum;
  if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    perror("socket");
    return 1;
  }
  serverAddr.sin_family = AF_INET;
  serverAddr.sin_port = htons(SERVER_PORT);
  //指定服务器端的ip,本地测试:127.0.0.1
  // inet_addr()函数,将点分十进制IP转换成网络字节序IP
  serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  if (connect(clientSocket, (struct sockaddr *)&serverAddr,
              sizeof(serverAddr)) < 0) {
    perror("connect");
    return 1;
  }
  printf("连接到主机...\n");
  while (1) {
    printf("发送消息:");
    scanf("%s", sendbuf);
    printf("\n");
    send(clientSocket, sendbuf, strlen(sendbuf), 0);
    if (strcmp(sendbuf, "quit") == 0)
      break;
    printf("读取消息:");
    recvbuf[0] = '\0';
    iDataNum = recv(clientSocket, recvbuf, 200, 0);
    recvbuf[iDataNum] = '\0';
    printf("%s\n", recvbuf);
  }
  close(clientSocket);
  return 0;
}
目录
相关文章
|
30天前
|
消息中间件 人工智能 Apache
阿里云两大 AI 原生实践荣获 2025 年度 OSCAR “开源+”典型案例
恭喜阿里云微服务引擎 MSE、Apache RocketMQ for AI 获权威认可!
197 14
|
开发者 Python 设计模式
用 Python 轻松创建图形界面:Tkinter 入门指南
用几行Python代码就能创建桌面小工具?没错!tkinter是Python内置的GUI库,无需安装,跨平台支持。从窗口、按钮到弹窗,轻松实现图形界面交互,适合新手快速上手,打造专属小工具。#Python #tkinter
356 0
|
1月前
|
传感器 人工智能 安全
AI + 视频监管:构筑智慧工地全场景安全防线
融合AI与物联网技术,智慧工地视频监管系统实现人员、设备、环境全维度智能管控,通过主动预警、全域覆盖、数据闭环,提升安全隐患识别效率,降低事故率67%,减少巡检成本40%,推动建筑安全管理迈向智能化、精细化新阶段。
234 0
|
人工智能 自然语言处理
详解:天宫ai官方网站_天宫官网ai入口是什么
天宫AI,正如其名,是昆仑万维精心打造的一款大型语言模型,目标直指 OpenAI 的 ChatGPT,立志成为中文 AI 领域的佼佼者! 其官网 tiangong.cn 已经敞开大门,迎接探索者们。
|
NoSQL Ubuntu MongoDB
在Ubuntu 16.04上安装和保护MongoDB的方法
在Ubuntu 16.04上安装和保护MongoDB的方法
212 1
|
存储 固态存储 芯片
计算机中内存与存储
【7月更文挑战第28天】
2507 1
|
机器学习/深度学习 人工智能 算法
人工智能的伦理困境:机器决策与人类价值观的碰撞
【8月更文挑战第23天】在人工智能(AI)技术飞速发展的时代,机器学习算法已渗透进我们生活的方方面面,从日常消费推荐到医疗诊断,再到司法判决。然而,随着AI决策能力的增强,一系列伦理问题也随之浮现。本文将探讨AI决策背后的伦理挑战,包括数据偏见、隐私保护、责任归属以及自主性与控制的问题,并思考如何在技术进步的同时维护人类的价值观和伦理标准。
|
XML Java 数据格式
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
lua遍历table的方式、运算符、math库、字符串操作方法
1068 0
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
|
Kubernetes 负载均衡 持续交付
探索现代微服务架构下的容器化技术
【4月更文挑战第13天】 在当今软件开发领域,微服务架构和容器化技术已成为推动云原生应用发展的关键因素。本文将深入探讨微服务与容器化结合的优势、面临的挑战以及实践中的解决方案。我们将通过具体案例分析,揭示如何利用容器化技术优化微服务部署、扩展和管理,同时保证系统的高可用性和弹性。文章的目的在于为开发者和技术决策者提供一种系统化的方法来构建和维护高效的微服务环境。
|
人工智能 安全 API
【LangChain系列】第十篇:数据保护简介及实践
【5月更文挑战第24天】本文探讨了在使用大型语言模型时保护个人数据的重要性,特别是涉及敏感信息如PII(个人可识别信息)的情况。为了降低数据泄露风险,文章介绍了数据匿名化的概念,通过在数据进入LLM前替换敏感信息。重点讲解了Microsoft的Presidio库,它提供了一个可定制的文本匿名化工具。此外,文章还展示了如何结合LangChain库创建一个安全的匿名化流水线,包括初始化匿名器、添加自定义识别器和操作符,以及在问答系统中集成匿名化流程。通过这种方式,可以在利用LLMs的同时保护数据隐私。
494 0