socket应用的例子
当使用 C 语言实现 Socket 编程时,可以通过系统提供的网络库来实现网络通信。以下是一个简单的示例,演示了如何创建一个简单的服务器和客户端,实现客户端向服务器发送消息并接收回复的功能。
服务器端(server.c)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#define PORT 8080
#define MAX_BUFFER_SIZE 1024
int main() {
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
char buffer[MAX_BUFFER_SIZE] = {0};
// 创建 Socket
if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 设置服务器地址和端口
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// 绑定 Socket
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("Socket bind failed");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_socket, 5) == -1) {
perror("Listen failed");
exit(EXIT_FAILURE);
}
printf("Server listening on port %d\n", PORT);
while (1) {
socklen_t client_addr_len = sizeof(client_addr);
// 等待客户端连接
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_socket == -1) {
perror("Accept failed");
continue;
}
printf("Client connected: %s\n", inet_ntoa(client_addr.sin_addr));
// 接收客户端消息
int bytes_received = recv(client_socket, buffer, MAX_BUFFER_SIZE, 0);
if (bytes_received <= 0) {
perror("Receive failed");
close(client_socket);
continue;
}
// 处理客户端消息
printf("Received from client: %s\n", buffer);
// 发送回复给客户端
const char *reply_message = "Hello, client! I received your message.";
send(client_socket, reply_message, strlen(reply_message), 0);
close(client_socket);
}
close(server_socket);
return 0;
}
客户端(client.c)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1"
#define PORT 8080
#define MAX_BUFFER_SIZE 1024
int main() {
int client_socket;
struct sockaddr_in server_addr;
char buffer[MAX_BUFFER_SIZE] = {0};
// 创建 Socket
if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 设置服务器地址和端口
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
perror("Invalid address");
exit(EXIT_FAILURE);
}
// 连接服务器
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("Connection failed");
exit(EXIT_FAILURE);
}
// 发送消息给服务器
const char *message = "Hello, server! I am a client.";
send(client_socket, message, strlen(message), 0);
// 接收服务器回复
int bytes_received = recv(client_socket, buffer, MAX_BUFFER_SIZE, 0);
if (bytes_received <= 0) {
perror("Receive failed");
close(client_socket);
exit(EXIT_FAILURE);
}
printf("Received from server: %s\n", buffer);
close(client_socket);
return 0;
}
这是一个简单的 C 语言 Socket 编程示例,演示了一个基本的服务器和客户端之间的消息交互。请注意,这是一个简化的示例,实际应用中可能需要更多的错误处理和安全性措施。
socket应用的例子的更多相关文章
- MSDN上的异步socket 服务端例子
MSDN上的异步socket 服务端例子 2006-11-22 17:12:01| 分类: 代码学习 | 标签: |字号大中小 订阅 Imports SystemImports Syste ...
- C# Socket异步聊天例子
最近在配合游戏服务器端搞一个客户端通信,客户端是unity搞的,理所当然就高C#了,上手之前先看了一下C# Socket通信这一块,基本不考虑同步方式,而异步方式,微软也提供了两套API,一套是Beg ...
- php实现socket简单的例子
一.Socket简介 1.socket只不过是一种数据结构 2.使用这个socket数据结构去开始一个客户端和服务器之间的会话 3.服务器是一直在监听准备产生一个新的会话.当一个客户端连接服务端,它就 ...
- Socket 类通信例子-第24章
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Socket网络编程例子
1.为了安全的进行通信,基于ACK确认机制----重传机制 使用selector机制的多路复用的IO通信机制,此外还有epoll控制 业务挂接点或者接入点: 常见的接入点: RDBMS进行CRUD M ...
- c# socket编程简单例子
服务器端代码 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Thr ...
- 一个linux下socket编程的例子,client连server
关于socket编程,以下文章写得比较好:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 1. accept()函 ...
- socket的简单例子
最近刚刚开始学了socket的模块,就写了一个服务器与客户端交互的程序 有两种模式: 1.就是先电脑自动回复 2.就是人工服务 接下来就是代码了 服务器端的代码: #Author:陈浩彬 import ...
- 基于Socket的Winform例子
一.直接上效果图 二.Socket握手 三.服务端 Thread threadWatch = null;// 负责监听客户端的线程 Socket socketWatch = null;// 负责监听客 ...
- 学习socket的小例子
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
随机推荐
- 你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
在实践中,很多团队对于DevOps 流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃.实际上,流水线的设计和写代码一样,需要基于"业务场景"进行一定的设计编排, ...
- HTTP请求的几种方式
1.HTTP请求简介[1] HTTP(Hypertest Transfer Protocol)是用于传输像HTML这样的超文本文件的应用层协议.它被设计用于WEB浏览器端和WEB服务端的交互,但也有其 ...
- 【技术积累】Linux中的基础知识【一】
Linux系统是什么 Linux系统是一种开源操作系统,它极具可定制性和灵活性,因此受到了许多人的欢迎.Linux系统以简单,强大和兼容性而著称.它可用于各种设备,从个人计算机到超级计算机,从移动设备 ...
- 如何通过AWS的AmazonSageMaker进行机器学习
目录 <如何通过 AWS 的 Amazon SageMaker 进行机器学习> 一.引言 随着人工智能和机器学习的发展,越来越多的企业和机构开始使用这些技术来进行各种应用场景的处理和分析. ...
- google colab使用体验
复现的TRSSL 的代码似乎是python3.8的,在本地跑电脑带不起来,即时把处理图形数改为1 但是colab用3.8不太好下载包, 因此直接上了3.9 除了一些库没有意外,遇到了一点小问题: Ca ...
- Collection 接口及其常用方法
Collection 接口的特点 Collection接口没有直接实现类,提供了更具体的子接口(如Set和List)的实现.Collection实现类(通常通过其中一个子接口间接实现Collectio ...
- zynq7000 emc启动及其加速
背景需求 ZYNQ 7000系统在出场时需要将固件从eMMC启动,原因有2: FLASH存储空间小: SD卡容易脱落,不适合产品存放系统文件: 需要注意,ZYNQ7000 系列不支持eMMC作为BOO ...
- [Java基础] ==和equals比较
==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址 equals:object中默认也是采用==比较,通常会重写 Object public boolean equals(Obj ...
- GetX 关于报错 Null check operator used on a null value的解决
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'logic.dart'; class Ge ...
- 使用Locust进行分布式性能测试
Locust是一个强大的性能测试工具,用于评估系统的性能和可扩展性.本文将简洁地介绍使用Locust进行分布式性能测试的步骤和优势. 步骤: 1. 配置测试环境:在主节点和多个从节点上安装相同版本的L ...