Linux下TCP/IP编程--TCP实战
之前尝试过windows下的简单TCP客户端服务器编写,这次尝试下一下Linux环境下的TCP
客户端代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
struct CustomMessage {
char university[4]; // "AHU\0"
char major[32]; // 专业
char data[256]; // 消息数据
};
int main() {
int client_socket;
struct sockaddr_in server_address;
// 创建套接字
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 设置服务器地址
memset(&server_address, 0, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8888);
if (inet_pton(AF_INET, "127.0.0.1", &server_address.sin_addr) <= 0) {
perror("Invalid IP address");
close(client_socket);
exit(EXIT_FAILURE);
}
// 连接服务器
if (connect(client_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
perror("Connection failed");
close(client_socket);
exit(EXIT_FAILURE);
}
while (1) {
// 获取用户输入的消息
printf("请输入要发送的消息 (输入 exit 结束): ");
struct CustomMessage message_to_send;
fgets(message_to_send.data, sizeof(message_to_send.data), stdin);
message_to_send.data[strcspn(message_to_send.data, "\n")] = '\0'; // 移除换行符
strcpy(message_to_send.university, "AHU"); // 设置学校为"AHU"
strcpy(message_to_send.major, "CS"); // 设置专业为"CS"
// 发送自定义消息
int bytes_sent = send(client_socket, (const char*)&message_to_send, sizeof(struct CustomMessage), 0);
if (bytes_sent < 0) {
perror("Send failed");
close(client_socket);
exit(EXIT_FAILURE);
}
// 如果用户输入 "exit",结束循环
if (strcmp(message_to_send.data, "exit") == 0) {
break;
}
}
// 关闭客户端套接字
close(client_socket);
return 0;
}
服务器端代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define MAX_PENDING_CONNECTIONS 5
struct CustomMessage {
char university[4];
char major[32];
char data[256];
};
int main() {
int server_socket, client_socket;
struct sockaddr_in server_address, client_address;
socklen_t client_address_length = sizeof(client_address);
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
memset(&server_address, 0, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(PORT);
if (bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
perror("Bind failed");
close(server_socket);
exit(EXIT_FAILURE);
}
if (listen(server_socket, MAX_PENDING_CONNECTIONS) < 0) {
perror("Listen failed");
close(server_socket);
exit(EXIT_FAILURE);
}
printf("Server listening on port %d...\n", PORT);
while (1) {
client_socket = accept(server_socket, (struct sockaddr*)&client_address, &client_address_length);
if (client_socket < 0) {
perror("Accept failed");
close(server_socket);
exit(EXIT_FAILURE);
}
while (1) {
struct CustomMessage received_message;
ssize_t bytes_received = recv(client_socket, (char*)&received_message, sizeof(struct CustomMessage), 0);
if (bytes_received > 0) {
printf("Received Message:\n");
printf("University: %s\n", received_message.university);
printf("Major: %s\n", received_message.major);
printf("Data: %s\n", received_message.data);
if (strcmp(received_message.data, "exit") == 0) {
close(client_socket);
break;
}
}
else if (bytes_received == 0) {
printf("Client disconnected\n");
close(client_socket);
break;
}
else {
perror("Receive failed");
close(client_socket);
break;
}
}
}
close(server_socket);
return 0;
}
运行结果

Linux下TCP/IP编程--TCP实战的更多相关文章
- .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...
- Linux下的C编程实战
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...
- TCP/IP、TCP、UDP、Socket知识汇总
带你了解TCP/IP,UDP,Socket之间关系 https://blog.csdn.net/chaoshenzhaoxichao/article/details/79785318 主要知识点: T ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
- linux下的c编程
linux下的c编程 Linux 系统上可用的 C 编译器是 GNU C 编译器, 它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU C 对标准 C 进行一系列扩展,以增强标准 ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- Ubuntu Linux下设置IP的配置命令
Ubuntu Linux下设置IP的配置命令 今天装了Ubuntu,但是发现不能上网,开始排查问题: 1.首先确定网络连接是否正确,所用的网线是否可以正常工作 2.查看网卡是否能正常工作,检测的方法如 ...
- LINUX下C语言编程调用函数、链接头文件以及库文件
LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...
随机推荐
- 配置windows update失败还原更改
配置windows update失败还原更改_解决方案 解决方法: 方法1: 重启,按F8,选择最后一次正常启动. 如果还是需要等待.可采用方法2: 方法2: 重启,按F8,选 ...
- 高通ADSP USB流程
在高通平台上,ADSP(Audio Digital Signal Processor,音频数字信号处理器)可以通过 USB 接口与主机进行数据传输,以下是大致的 ADSP USB 流程: 主机发起 U ...
- seaborn.lmplot详解
官方文档 首先我们要知道,lmplot是用来绘制回归图的. 让我们来看看他的API: seaborn.lmplot(x, y, data, hue=None, col=None, row=None, ...
- Android复习(三)清单文件中的元素——>supports-gl-texture、supports-screens
<supports-gl-texture> 注意:Google Play 会根据应用支持的纹理压缩格式对其进行过滤,以确保应用只能安装在可正确处理其纹理的设备上.您可以将纹理压缩过滤用作定 ...
- Docker高阶篇(一)
本篇章主要为工作实践过程中对高端应用的处理和把控 1.Docker复杂安装 mysql的主从复制 https://www.bilibili.com/video/BV1gr4y1U7CY?p=41&am ...
- KubeSphere 在互联网医疗行业的应用实践
作者:宇轩辞白,运维研发工程师,目前专注于云原生.Kubernetes.容器.Linux.运维自动化等领域. 前言 2020 年我国互联网医疗企业迎来了"爆发元年",越来越多居民在 ...
- Kubernetes 跨 StorageClass 迁移 Persistent Volumes 完全指南
大家好,我是米开朗基杨. KubeSphere 3.3.0 (不出意外的话~)本周就要 GA 了,作为一名 KubeSphere 脑残粉,我迫不及待地先安装 RC 版尝尝鲜,一顿操作猛如虎开启所有组件 ...
- python将html批量转换为md
一.安装依赖 pip install html2text 代码实现 import os import shutil import html2text def convert_html2md(src_h ...
- 全局负载均衡、CDN内容分发的原理与实践
CDN简介 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...
- 循环程序结构设计(python)
文章目录 1.基本概念 2.for循环 2.1 for循环基本结构 2.2 实例介绍 2.2.1 循环输出字符 2.2.2循环输出2000以内的素数 3.whlie循环 3.1 while循环基本结构 ...