Java网络通信之Socket编程

Java 网络编程(超级详细) 1. 网络编程 1.1 网络编程概述 计算机网络 是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 1.2 网络编程三要素 1、IP地址 要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。 2、端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程 阅读详情

一,网络基础简介


1.TCP/IP协议  :

TCP:传输控制协议

IP:互联网协议


2.TCP/IP模型

5  应用层      (HTTP协议)
4  传输层     (TCP/IP协议)
3  网络层
2  数据链路层
1  物理层

3.IP地址:

每台机器唯一的标识 ,格式  ***.***.*.*


4,端口:

用于区分不同的应用程序,范围为0~65535,0~1023为系统保留

http:80    ftp:21    telnet:23



二,java中的网络支持

1.InetAddress :用于标识网络上的硬件资源

2, URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据

3,Socket:使用TCP协议实现网络通信的Socket相关的类

4,Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.MalformedInputException;

public class InetAddressTest {
	static BufferedReader br;

	public static void main(String[] args) throws IOException {
		try{
			URL url=new URL("http://www.baidu.com");
			 br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));
		    String data=br.readLine();
		    while(data!=null){
		    	System.out.println(data);
		    	data=br.readLine();
		    }
		
		
		}catch(MalformedInputException e){
			e.printStackTrace();
		}catch(IOException ioe){
			ioe.printStackTrace();
		}finally{
			if(br!=null){
				br.close();
			}
		}
	}

}


Socket通信实现步骤:

1.创建ServerSocket和Socket

2.打开连接到Socket的输入/输出流

3.按照协议对Socket进行读/写操作

4.关闭输入输出流,关闭Socket



服务器端:

1.创建ServerSocket对象,绑定监听端口

2.通过accept()方法监听客户端请求

3.连接建立后,通过输入流读取客户端发送的请求信息

4.通过输出流向客户端发送响应信息

5.关闭相关资源

客户端:

1.创建Socket对象,指明需要连接的服务器的地址和端口号

2.连接建立后,通过输出流向服务器端发送请求信息

3.通过输入流获取服务器响应的信息

4.关闭相关资源 


服务器端:

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

public class Server {
	public static void main(String[] args) throws IOException {
		
		Socket socket=null;
		int count=0;
		try {
			ServerSocket serverSocket=new ServerSocket(6688);
			while(true){
				socket =serverSocket.accept();
			    ServerThread serverThread=new ServerThread(socket);
			    serverThread.start();
			    count++;
			    System.out.println("客户端的数量为:"+count);
			}
		
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(socket!=null){
				socket.close();
			}
		}
		
	}

}

服务器端多线程执行类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerThread extends Thread {
	Socket socket=null;
	BufferedReader br=null;
	PrintWriter pw=null;
	public ServerThread(Socket socket){
		this.socket=socket;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			//获取输入流,并读取客户端信息
			br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String info=null;
			while((info=br.readLine())!=null){
				System.out.println(info);
			}
			socket.shutdownInput();   //关闭输入流
			pw=new PrintWriter(socket.getOutputStream());
			pw.write("欢迎您!,我是服务器端");
			pw.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				if(socket!=null)
					socket.close();
				if(br!=null)
					br.close();
				if(pw!=null)
					pw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	    
	}
	
}


客户端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
	public static void main(String[] args) throws IOException {
		Socket socket=null;
		PrintWriter pw=null;
		BufferedReader br=null;
		try {
			socket=new Socket("localhost", 6688);
			pw=new PrintWriter(socket.getOutputStream());
			pw.write("用户名:tom;密码:456");
			pw.flush();
			socket.shutdownOutput();
			
			br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			 String info=null;
			    while((info=br.readLine())!=null){
			    	System.out.println("我是客户端,服务器说"+info);
			    }
			    socket.shutdownInput();
		
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(socket!=null){
				socket.close();
			}
			if(pw!=null){
				pw.close();
			}
			if(br!=null){
				br.close();
			}
			
		}
	}

}


Java 网络通信之 Socket 编程全解析 Java 的 Socket 编程为开发者提供了强大的网络通信能力,通过Socket类和类可以方便地实现客户端与服务器之间的连接与数据交换。在实际应用中,需要深入理解网络通信的基本概念,合理处理数据传输、编码以及多线程并发等问题,才能构建出高效、稳定的网络应用程序。无论是开发小型的网络工具还是大型的分布式系统,掌握 Java 的 Socket 编程都是至关重要的一步,希望本文能够为广大 Java 开发者在网络编程的学习与实践中提供有益的参考与帮助。 阅读详情

相关推荐

Java网络编程不再难!从Socket到NIO,让你轻松搞定网络通信!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

喵手的博客 610

Java网络

Java网络

m0_51435825的博客 1061

java-obd-api:用Java编写的OBD-II API

Java OBD API 用Java编写的OBD-II API。 基于 。 快速开始 安卓 只需将其包含在build.gradle文件中: dependencies { ... // Java OBD API implementation 'com.github.eltonvs:java-obd-api:0.0.1' } 玛文 您只需要将其包含在pom.xml文件中: <dependency> <groupId>com.github.eltonvs</groupId> <artifactId>java-obd-api</artifactId> <version>0.0.1</version> </dependency> 样品用量 与OBD设备配对并建立蓝牙连接后。 // retrieve Bluetoo

Java程序员从笨鸟到菜鸟之(十三)java网络通信编程

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.youkuaiyun.com/csh624366188 首先声明一下,刚开始学习java网络通信编程就对他有一种畏惧感,因为自己对网络一窍不通,所以。。。呵呵。。你懂得,昨天又仔细的学习了一遍,感觉其实java网络编程也没想象的那么难,不信,咱一起看看。。。呵呵。。 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所...

long_yu2的专栏 452

手把手教你用DevExpress Patch工具解决VS项目中的试用弹窗问题

本文详细指导开发者使用DevExpress Patch工具解决Visual Studio项目中恼人的试用弹窗问题。核心在于理解并分步处理:首先正确应用补丁工具以绕过运行时验证,然后重点清理或重置项目中的licenses.licx文件以消除编译时验证,从而彻底根治弹窗。

weixin_29234423的博客 588

spdk + fio测试nvme 设备的性能

fio的测试对象可以是块设备、文件等,在spdk的使用过程中会unbind默认的nvme driver,所以在系统中是看不到nvme块设备的,在spdk中可以通过fio_plugin的方式,将spdk的用户态driver部分的io功能打包成一个ioengine提供给fio使用,可以综合spdk的高性能和fio提供的复杂场景。更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加。这个jobfile是spdk中提供的例子。领取,关注我持续更新哦!2.7 jobfile的例子。

lingshengxiyou的博客 1088

第二十一章Java网络编程

socket

你好, 我在学java的博客 2403

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形

Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。

Giver的博客 1928

Java---网络

Java网络编程、通信协议、三次握手、四次挥手、TCP、UDP

qq_56797899的博客 612

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 429

【智能优化算法】2024年SCI鳗鱼-石斑鱼优化算法(EGO),含MathType公式、word伪代码、visio流程图、matlab代码等。

该文中包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。 鳗鱼-石斑鱼优化算法(Eel and grouper optimizer ,EGO)是一种新型的元启发式算法(智能优化算法),灵感来源于海洋生态系统中鳗鱼和石斑鱼的共生作用和觅食策略。该成果由Ali Mohammadzadeh和Seyedali Mirjalili两位作者于2024年6月发表在SCI著名期刊《Cluster Computing》上。

2301_79359347的博客 1042

Java网络编程之Socket网络通信

package cn.webSocket.service; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; /** * * 今天整理以下网络编程的基础Demo; * * 网络编程: * * 1. 软件.

大雷 364

Verilator+VSCode实战:5分钟搞定Verilog语法检查与波形调试

本文详细介绍了如何将Verilator仿真器与VSCode编辑器高效集成,打造极速的Verilog开发工作流。通过环境配置、实时语法检查、一键仿真与波形生成等实战技巧,帮助IC设计工程师在几分钟内完成从代码编写到波形调试的全过程,大幅提升中小规模模块的验证效率。

weixin_28454475的博客 469

Java 入门指南:Java Socket 网络通信编程

Socket(套接字)是用于网络通信的编程接口、网络通信的基础,通过它可以实现不同计算机之间的数据传输,应用程序可以通过它发送或接收数据;就像操作文件那样可以打开、读写和关闭。它提供了一种机制,使得计算机之间可以进行数据的发送和接收。

热带鱼的技术博客 2577

YOLO骨干网络改进-第1篇:深度解析YOLOv8的C2f模块原理与实现

首先,需要将自定义的C2f模块注册到Ultralytics的模块字典中。# 注册自定义模块"""自定义的C2f模块。"""# 自定义YOLOv8s配置文件:yolov8s_custom.yamlscales:# Backbonebackbone:# Headhead:# 加载自定义模型# 训练模型imgsz=640,batch=16,device=0,workers=8,设计理念:C2f模块是C3模块的演进,通过增加梯度分支来丰富梯度流,提升特征表示能力。结构原理。

2201_76125393的博客 110

haxm-v7.8.0-20250729.zip

(github遇到进不去的情况)GitHub上的hamx-7.8.0-setup.exe文件

Java Socket 编程:网络通信的基石

Socket(套接字)是网络编程中的一个抽象概念,它是对网络中不同主机上的应用程序之间进行双向通信的端点的抽象。简单来说,Socket 就像是两个应用程序之间的桥梁,通过这个桥梁,两个应用程序可以在网络上进行数据的传输和交换。Java Socket 编程是实现网络通信的重要手段,通过 TCP 和 UDP 协议可以满足不同场景下的网络通信需求。掌握 Java Socket 编程的基本原理和实现方法,对于开发网络应用程序具有重要的意义。

weixin_73344672的博客 720

HFSS TDR仿真

本文主要讲述线缆的时域阻抗仿真方法,包含了HFSS仿真模型。实用简单

Java 网络编程:Socket 与网络通信

套接字是 IP 地址与端口的组合,是网络通信的基础。通过套接字,应用程序可以像操作文件一样打开、读写和关闭网络连接。掌握 Java Socket 编程对于理解网络通信机制至关重要。通过编写简单的客户端和服务器端程序,可以更好地理解网络通信的基本原理和实现方式。无论是基于 TCP 的 Socket 和 ServerSocket,还是基于 UDP 的 DatagramSocket,都是网络编程中不可或缺的工具。通过实践,可以进一步提升网络编程技能,为开发更复杂的网络应用打下坚实基础。

专注Java和MySQL领域知识分享 1672

数据集-地级市犯罪率数据(2000-2025年).txt

因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.youkuaiyun.com/li514006030/article/details/162034977

二自由度机械臂PD控制,2自由度机械臂,matlab源码.zip

二自由度机械臂PD控制,2自由度机械臂,matlab源码

Java网络编程基础:从Socket到高级网络通信

本文介绍了Java网络编程的基础知识,从基础的Socket编程到高级的网络通信技术。通过这些示例代码,可以帮助开发者理解和应用Java网络编程的不同技术,构建高效、可靠的网络应用程序。Netty提供了强大的抽象和丰富的功能,简化了网络编程的复杂性。以下是一个简单的示例,展示了如何使用Socket在Java中创建一个基本的服务器和客户端。在这个示例中,服务器为每个客户端连接创建一个新的线程,从而允许多个客户端同时连接到服务器。该示例展示了如何使用NIO创建一个非阻塞的服务器,从而提高处理并发连接的效率。

微赚开发者技术分享博客 346

java socket编程聊天室_java实现socket编程网络通信多人聊天室

【实例简介】java实现socket编程网络通信多人聊天室,可以实现简单的多人聊天功能。适合初学的大二,大三学生,学习。【实例截图】【核心代码】MulServer└── MulServer├── bin│ ├── Client$1.class│ ├── Client$2.class│ ├── Client$3.class│ ├── Client$4.class│ ├── Cli...

weixin_42456278的博客 449

Java网络通信-网络编程、常见协议、Socket

Java网络通信,该篇主要介绍了网络编程、常见协议以及Socket等...

m0_64005381的博客 1124

【Java】网络编程--Socket与TCP网络通信编程

本节中,你将学习到Socket什么,以及使用TCP网络通信编程完成双向通信和上传文件的功能。使用到的技术有TCP字节流编程和TCP字符流编程。通过对上传文件需求的实现,将使你对网络收发保存图片有初步的了解。

黄小黄的博客 1417

Java网络通信实验小记二:Socket编程

Socket编程——TCP&UDP 一、Socket套接字概述 网络上具有唯一标识符的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 通信的两端都有Socket。 网络通信其实就是Socket通信。 数据在两个Socket之间通过IO流传输。 Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己IP和端口号 可以把主机当做港口,Socket就是码头,...

xzh1_derek learns to code 402

Java笔记038-网络编程/网络的相关概念、InetAddress类、Socket、TCP网络通信编程、netstat指令、UDP网络通信编程、网络编程章节练习

Java笔记038-网络编程/网络的相关概念、InetAddress类、Socket、TCP网络通信编程、netstat指令、UDP网络通信编程、网络编程章节练习

qq_59621600的博客 746
上一篇: java反射--高级开发必须懂的
下一篇: myEclipse自动生成hibernate框架
oldbig_lin
博客等级 码龄10年 78粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值