Socket极简易的客户端/服务器程序示例

用 Python 实现一个简易版 HTTP 客户端 此文为《用 Python 撸一个 Web 服务器》系列教程的一个补充,这个系列教程介绍了如何使用 Python 内置的 socket 库实现一个简易版的 Web 服务器。 之所以写这篇文章,是因为我发现很多人并不清楚 HTTP 客户端的概念,以为只有浏览器才叫 HTTP 客户端。事实上并非如此,我们在 Web 开发中常见的 Postman、爬虫程序、curl 命令行工具 等,这些都可以称为 HTTP 客户端。 服务器程序示例 这里以一个 Hello World 程序来作为示例服务器,实现如下: # serv 阅读详情


学习socket网络编程,需要熟悉一些计算机网络的基本知识(互联网协议中的TCP和UDP协议)。

Java支持基于流的通信和基于包的通信。基于流的通信使用的就是TCP(传输控制协议)进行数据传输,基于包的通信使用的就是UDP(用户数据报协议)。因为TCP协议能够发现丢失的传输信息并进行重新发送(可靠,无损的服务),而UDP不能保证传输没有丢失(不可靠的服务),因此,Java程序中多采用基于流的通信。

下面,就进入简单demo吧

一、服务器端

要创建服务器,需要创建一个服务器套接字,即ServerSocket,并且把它附加到一个端口上,服务器就能从这个端口上进行监听。

这里我们任意选择一个没有被其它进程使用的端口3366.

1.创建服务器的套接字:

ServerSocket server = new ServerSocket(3366);

2.创建服务器后监听连接:

Socket socket = server.accept();

这个语句会一直等待,知道有一个客户端连接到了该服务器的套接字。


二、客户端

客户端连接服务器,需要指定连接的是哪一个主机(服务器),在这里我的服务器和客户端都是在我的本地,因此是localhost(虚拟机会让DNS将我的主机名解析成127.0.0.1),在这里不仅可以使用IP地址,也可以使用域名。

选择3366端口号进行连接,服务器监听的是这个端口号,能够发现客户端的连接请求。

Socket socket = new Socket("localhost", 3366);

就这几个方法很简单的。

下面是一个小例子

首先是服务端:

package network;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable{

	private static final int PORT = 3366;
	private ServerSocket server;
	private Socket socket;

	@Override
	public void run() {
		DataInputStream in = null;
		DataOutputStream out = null;
		try {
			// 1.创建一个服务器套接字,端口号为 11111
			server = new ServerSocket(PORT);
			// 2.服务器监听这个端口的连接
			socket = server.accept();
			// 3.获取接收数据的输入输出流
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());
			while (true) {
				// 4.读取输入流中的数据
				byte[] buffer = new byte[100];
				// 将客户端传输来的数据读入buffer缓存数组中
				in.read(buffer);
				System.out.println("服务器接收到客户端的信息:" + new String(buffer));
				// 5.客户端作出回应
				String response = "Word";
				byte[] buf = response.getBytes();
				out.write(buf);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
		
	}

然后是客户端

package network;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable{

	private static final int PORT = 3366;
	private ServerSocket server;
	private Socket socket;

	@Override
	public void run() {
		DataInputStream in = null;
		DataOutputStream out = null;
		try {
			// 1.创建一个服务器套接字,端口号为 11111
			server = new ServerSocket(PORT);
			// 2.服务器监听这个端口的连接
			socket = server.accept();
			// 3.获取接收数据的输入输出流
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());
			while (true) {
				// 4.读取输入流中的数据
				byte[] buffer = new byte[100];
				// 将客户端传输来的数据读入buffer缓存数组中
				in.read(buffer);
				System.out.println("服务器接收到客户端的信息:" + new String(buffer));
				// 5.客户端作出回应
				String response = "Word";
				byte[] buf = response.getBytes();
				out.write(buf);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
		
	}

然后启动这两个线程,

package network;

public class MyTest {

	public static void main(String[] args) {
		
		Server server = new Server();
		Client client = new Client();
		
		Thread t1 = new Thread(server);
		Thread t2 = new Thread(client);
		
		t1.start();
		t2.start();
	}

}

运行结果如下:


可以知道,服务器启动后一直在监听不会中断,每当客户端发送请求(信息)就会给出相应的响应。


一个简易的TCP服务器程序(将收到的字符发回给客户端) /*----------------------------------------------------------------- 运行该程序相当于启动了服务器,用telnet客户端来连接服务器。 命令:telnet 127.0.0.1 9999 -----------------------------------------------------------------*/ #inc... 阅读详情

相关推荐

Socket通讯协议理解及客户端服务器程序流程

Socket是网络通信中的一项重要技术,它提供了在网络上进行数据交换的接口。用C#、Java、C++等开发语言,都可以开发Socket网络通信程序。

luckyext的博客 1118

【Socket(套接字)】Java Socket通信示例

Socket是计算机网络通信的基础,通过IP地址和端口号的组合,它能够确保数据在计算机之间的准确传递,就像电话一样。在互联网上,这个机制被广泛用于不同应用之间的数据交换,从网页浏览到电子邮件,再到在线游戏,Socket都发挥着关键作用。你可以说话,朋友可以听到,朋友也可以回应你,你可以听到朋友的回应。在计算机网络中,Socket就像这部手机和电话线一样,它提供了一种标准的方式,让计算机之间可以建立连接、发送数据和关闭连接。在Socket中,当通信完成后,可以关闭Socket连接,释放资源。

qq_47450919的博客 512

AI Agent在保险行业落地:从智能客服到核保理赔的实践路径

AI Agent作为大模型技术的核心应用形态,正从通用对话走向垂直行业深度落地。其本质是让机器理解自然语言、处理非结构化文档,并在复杂业务流程中辅助人类完成信息抽取、内容生成与多轮交互。在保险这一强监管、高客单价的行业中,智能客服与销售助手率先验证了降本增效的价值,核保与理赔环节则进一步展示了AI在文档理解与风控辅助上的高价值潜力。从技术原理到商业闭环,垂直场景正在成为AI应用的主战场。本文以保险行业为样本,剖析AI Agent如何嵌入真实业务流程,梳理可复用的三阶段落地路径,为企业在医疗、金融等类似高文本

weixin_29039773的博客 364

socket通信基础讲解及示例-C

socket入门

u011215927的博客 1131

KF-gins输出结果绘图

KF-gins输出结果绘图

m0_51977577的博客 1107

BLDC方波控制双闭环Simulink仿真模型

无刷直流电机方波控制双闭环Simulink仿真模型搭建详细教程,包括速度PI环、电流PI环、换向逻辑和受控电压源,仿真结果良好。

m0_57458432的博客 6870

Cocos网络篇[3.2](3) ——Socket连接(1)

【唠叨】在客户端游戏开发中,使用HTTP进行网络通信的比较少,一般使用的都是Socket进行通信。而HTTP一般用于网页或者网页游戏。使用第三方Socket通信库:ODSocket。【参考】http://blog.youkuaiyun.com/sight_/article/details/8138802(Socket详解)http://blog.csdn...

weixin_33936401的博客 485

基于LSTM的多变量温度预测(python从入门到入坑)

基于LSTM的多变量温度预测(python) ——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话) 这里写目录标题基于LSTM的多变量温度预测(python)——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话)一、我为什么要写这些?二、具体做了什么?三、源代码切块加注释,恳请批评指正(●’◡’●)ノ 一、我为什么要写这些? 因为让人抓狂的课程大作业,我小组选择了一个多变量预测方面的课题,在我这个大三基本上还没接触过Python数据处理,甚至对神经网络什么的都

代码之狐的博客 1万+

socket编程详解(一)——服务器端

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区 分不同的服务的。 端口提供了一种访问通道, 服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP

打不倒的程序猿 8851

windows的rancherDesktop修改镜像源

Rancher Desktop中的“Allowed Images”功能(通常在 Preferences -> Container Engine -> Allowed Images 中找到)是用来定义一个允许拉取和推送的镜像列表的规则,例如,只允许从您组织或特定的受信任的仓库中获取镜像。如果问题依旧,请提供您Rancher Desktop的版本和当前选择的容器运行时,以便进一步协助。总结一下,对于Windows上的Rancher Desktop,如果您使用默认的。,镜像源的配置通常通过一个名为。

zwjapple的专栏 2695

利用ORCAD/pspice 仿真分析电路的幅度相位谱

利用ORCAD的pspice仿真分析电路的相位谱1.介绍2.搭建电路原理图3.建立仿真文件,进行交流分析4.仿真、查看输出5.总结 1.介绍 orcad配合pspice一直是电路原理图绘制和仿真的主要工具,pspice工具提供了诸如暂态分析、直流分析、交流分析等多个工具。学校主要教的是multisim,对orcad讲得很少,最进要利用orcad对运放构成的电路的频响、相移特性进行分析,发现资料幅度...

qq_40011737的博客 1万+

socket服务器端和客户端通信——基础篇

面对游戏开发者讲解的socket,简单基础

qq_52397831的博客 7678

jane street market prediction 冠军方案 奇巧淫技与topline链接整理(3/3)

目录前言将income 作为loss(优化目标)读取数据,定义优化目标模型训练与微调提交结果多目标学习Topline整理AE+MLP (rank10)Current 17th solution: Ensembles of deep (49 layer) MLPsmixup augmentation: a way to learn from trades with weight=0 (rank4)My (perhaps) over-complicated LSTM solutionCurrent 62nd .

weixin_51484067的博客 2639

基于Windows Socket API的简易服务器程序

2. `CreateServerSocket()` 函数创建一个新的TCP套接字,并将其绑定到本地IP地址(ADDR_ANY)的指定端口(PORT),等待客户端连接。3. 主函数中,通过`accept()` 接受客户端的连接,然后在一个无限循环中读取客户端发送的消息,将用户输入的内容发送回客户端,直到客户端断开连接。遇到错误时,如`WSAStartup` 或 `bind` 失败,会调用`err` 函数打印错误信息并返回处理结果。//parm1 请求的Socket版本。//1 创建空的Socket。

XLYcmy的博客 1118

SAP UI5 控件剖析系列之 sap.m.DatePicker:单日选择的工程化用法、最佳实践与常见坑

在 SAP UI5 的输入控件族里,是最常被使用的日期选择控件。它把一个可编辑的输入框与一个弹出的日历整合在一起,允许用户用触摸、鼠标或键盘在本地化格式下选择某一天;控件既可以从弹出的日历里点选,也可以直接在输入框里键入日期。官方 Fiori 设计规范对它的定位就是:完成单个日期的选择,不牵涉时间,也不负责跨天的范围选择。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 343

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Java网络编程】使用Tcp和Udp实现一个小型的回声客户端服务器程序

利用Java实现网络编程,编写一个小型的Udp和Tcp的回声客户端服务器程序。附带代码和详细的代码解释

yican2580的博客 2287

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

socket建立客户端服务器程序

在python标准库中,使用socket模块中提供的socket对象,就可以i在计算机网络中建立服务器和客户端,并且能够进行通信,服务器端需要建立一个socket对象,并等待客户端的连接,客户端使用socket对象与服务器进行连接,一旦连接成功,客户端和服务器就可以进行通信了

chinese_cabbage0的博客 1481

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

基于TCP协议的客户端/服务器程序

socket函数: int socket(int domain, int type, int protocol); socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。对于IPv4,domain参数指定为AF_INET。对于TCP协议,type参数指定为SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRAM,表示面

qq_44690575的博客 1061

【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)

Socket套接字,是由系统提供的用于网络编程的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 前面说过,要想进行网络编程,需要使用的系统API,本质上是由传输层提供的。 传输层涉及到的主要协议有两个: 流套接字:TCP(传输控制协议) 数据报套接字:UDP(用户数据报协议)

StuLearn-LJC的博客 3086

基于Socket的简易聊天工具

基于Socket的简易聊天工具 ​ 简易聊天工具,该聊天工具有服务器端和客户端两个方面,服务端通过套接字与服务器建立连接,服务器会接受客户端的请求,并对客户端做出响应。而客户端则会通过与服务器建立连接,来进行客户端之间P2P的信息交流。 ​ 简易聊天工具的功能: ​ 1、登录、注册 ​ 2、公聊 ​ 3、私聊 1、数据库连接的工具类 import java.sql.Connection; i...

lgm_szsl的博客 2393

一个简易的用Socket API建立TCP通信程序Demo

实现一个最简单的客户端和服务端的通信程序服务器程序工作 1.初始化 Winsock库 2.创建监听套接字(socket()函数) 3.填写要绑定的本地地址结构(bind()函数) 4.给监听套接字绑定本地IP地址 5.开始监听(listen()函数) 6.循环执行 调用accept()函数接收客户端连接请求,如果accept()函数返回成功.则调用send()函数向客户端发送数据或者调用

MagicScaring的博客 9505

python 客户端 版本更新_用 Python 实现一个简易版 HTTP 客户端

此文为《用 Python 撸一个 Web 服务器》系列教程的一个补充,这个系列教程介绍了如何使用 Python 内置的 socket 库实现一个简易版的 Web 服务器。之所以写这篇文章,是因为我发现很多人并不清楚 HTTP 客户端的概念,以为只有浏览器才叫 HTTP 客户端。事实上并非如此,我们在 Web 开发中常见的 Postman、爬虫程序、curl 命令行工具 等,这些都可以称为 HTTP...

weixin_42519497的博客 187

当使用Socket作为服务器程序

Socket服务器

杨鑫newlife的专栏 1230

简单socket通信,回显 服务器程序与客户端程序之间的通信。

前情了解:Socket 通信编程是一种基于网络的通信方式,允许不同主机上的程序通过网络进行数据交换。

m0_73763994的博客 692

下图是基于TCP协议的客户端/服务器程序的一般流程:

下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept

luo809976897的专栏 1万+

使用socket编程来实现一个简单的C/S模型(TCP协议)

下图是基于TCP协议的客户端/服务器程序的一般流程:服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。数据传输的过程:建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起请求,

caiji0169的博客 2367
上一篇: Java动态代理的实现
下一篇: redis.conf常用参数配置说明
夜希Cc
博客等级 码龄11年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值