JAVA 网络编程

java网络编程 通信双方地址IP端口号一定的规则(即:网络通信协议。有两套参考模型)OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。 阅读详情

一、网络编程相关

IP地址:网络中设备的标识,不易记忆,可用主机名
本地地址:127.0.0.1  主机名:localhost
端口(逻辑端口 ):
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024系统使用或保留端口。
计算机间通讯实质是两个进程间的通讯,而IP地址标示计算机物理设备,端口号就是标示具体进程

如图中每个设备发出的数据包中都包含有类似IP=XXX,端口=XXX,这样就等定位到要通讯的具体设备中的具体进程,而具体实现就要用到java中的Socket类了。
Socket套接字
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
传输协议(通讯的规则)
常见协议:TCP/IP,UDP
一.区别
二者都是有用的和常用的,如果纯粹从概念上区分二者就比较费解了,我们直接从功能上进行区分,简单明了: 
这两种传输协议也就是合于适配不同的业务和不同的硬件终端。 
在使用中,类似于图像、声音等对可靠性要求没有那么高的业务可以用UDP,他们不需要准确存储对准确性无要求但要求速度快。
类似于文本、程序、文件等要求可靠的数据最好就用TCP,但会牺牲一些速度。 
对系统资源的要求:CP较多,UDP少。 
程序结构:UDP程序结构较简单,TCP复杂。 
流模式与数据报模式:TCP保证数据正确性,UDP可能丢包; TCP保证数据顺序,UDP不保证
 
二.用途
TCP是面向连接的,有比较高的可靠性,一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,而 UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器 使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口 常为4000或其后续端口的原因了),即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。 
UDP是一种面向无连接的通信协议,该协议使得数据传输的速度得到大幅度的提高。视频聊天语音聊天基本都是用UDP协议。 



二、常见的两种通讯协议实现代码

  • UDP
接受键盘录入字符串并发送到本机127.0.0.1的8888端口
public class UdpSend {
	public static void main(String[] args) throws Exception {

		DatagramSocket socket = new DatagramSocket();
		DatagramPacket packet;
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		String line;
		while ((line = reader.readLine()) != null && !"886".equals(line)) {

			packet = new DatagramPacket(line.getBytes(),
					line.getBytes().length, InetAddress.getByName("127.0.0.1"),
					8888);
			socket.send(packet);

		}
		socket.close();
	}
}
接受8888端口的数据,并打印来源ip和端口
public class UdpReceive {
public static void main(String[] args) throws Exception{
		DatagramSocket socket=new DatagramSocket(8888);
		while(true){
		byte[] buf=new byte[1024];
		DatagramPacket packet=new DatagramPacket(buf, buf.length);
		socket.receive(packet);
		String ip=packet.getAddress().getHostAddress();
		System.out.println(ip);
		System.out.println(packet.getPort());
		System.out.println(new String(packet.getData()));
		}
	}
}

多线程模拟聊天过程,一个线程接受、一个线程发送
public class Chat {
	public static void main(String[] args) throws Exception {
		Send send = new Send();
		Receive receive = new Receive();
		send.setSocket_send(new DatagramSocket());
		receive.setSocket_receive(new DatagramSocket(9999));
		Thread t1 = new Thread(send);
		Thread t2 = new Thread(receive);
		t1.start();
		t2.start();

	}
}

class Send implements Runnable {
	private DatagramSocket socket_send;

	public void setSocket_send(DatagramSocket socket_send) {
		this.socket_send = socket_send;
	}

	public DatagramSocket getSocket_send() {
		return socket_send;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		DatagramPacket packet;
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		String line;
		try {
			while ((line = reader.readLine()) != null) {

				packet = new DatagramPacket(line.getBytes(),
						line.getBytes().length,
						InetAddress.getByName("127.0.0.1"), 9999);

				socket_send.send(packet);
				if ("bye".equals(line))
					break;
			}
			socket_send.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

class Receive implements Runnable {
	private DatagramSocket socket_receive;

	public void setSocket_receive(DatagramSocket socket_send) {
		this.socket_receive = socket_send;
	}


	@Override
	public void run() {
		// TODO Auto-generated method stub
		DatagramPacket packet;
		byte[] buf = new byte[1024];
		try {

			while (true) {
				packet = new DatagramPacket(buf, buf.length);
				socket_receive.receive(packet);
				System.out.println(new String(packet.getData()));

			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
  • TCP/IP
客户端接收键盘录入发送数据给127.0.0.1本机的2015端口
public class TCPClient {
	public static void main(String[] args) throws Exception {

		ServerSocket serSocket = new ServerSocket(2015);
		Socket socket = serSocket.accept();
		InetAddress inetAddress = socket.getInetAddress();
		System.out.println(inetAddress.getHostAddress() + "连接中...");
		InputStream in = socket.getInputStream();
		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = in.read(buf)) != -1) {

			System.out.println(new String(buf, 0, len));
		}
		serSocket.close();

	}
}
服务器端接受数据并打印
public class TCPServer {
	public static void main(String[] args) throws Exception {
		Socket socket = new Socket("127.0.0.1", 2015);
		OutputStream out = socket.getOutputStream();
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		String data = null;
		while ((data = reader.readLine()) != null) {
			out.write(data.getBytes());
		}
		socket.close();
	}
}
客服端上传图片到服务器并接受服务器反馈信息并打印
public class TCPPicC {
	public static void main(String[] args) throws Exception {
		File file = new File("d:" + File.separator + "heima.jpg");
		Socket socket = new Socket("127.0.0.1", 2015);
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
		OutputStream out =  socket.getOutputStream();
		byte[] data = new byte[1024];
		int lens=0;
		while ((lens=in.read(data)) != -1) {
			out.write(data,0,lens);
		}
		socket.shutdownOutput();
		in.close();
		InputStream inputStream=socket.getInputStream();
		byte[] buf=new byte[1024];
		int len=inputStream.read(buf);
		System.out.println(new String(buf, 0, len));
		socket.close();
	}
}
服务器端接收客户端上传的图片并反馈信息给客户端
public class TCPPicS {
	public static void main(String[] args) throws Exception {
		ServerSocket serverSocket = new ServerSocket(2015);
		Socket socket = serverSocket.accept();
		BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:" + File.separator + "heima111.jpg"));
		int data = 0;
		while ((data = in.read()) != -1) {
			out.write(data);
		}
		OutputStream outputStream=socket.getOutputStream();
		outputStream.write("接收完毕".getBytes());
		out.close();
		serverSocket.close();
		
	}
}


小程序结合Three.js与gsap:打造流畅3D动画的完整指南 本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。 阅读详情

相关推荐

极空间NAS小白也能搞定的Gitea部署:Docker+MySQL避坑全记录

本文为极空间NAS用户提供了一份详尽的Gitea私有代码仓库部署指南。针对极空间ARM架构和图形化Docker管理的特殊性,文章重点讲解了如何通过Docker和MySQL容器进行部署,并提供了三种获取兼容镜像的实战策略,特别是利用第三方镜像站转录的方法,帮助小白用户成功搭建并初始化Gitea服务,实现私有Git托管。

weixin_28318011的博客 368

【Java网络编程详解】

Java网络编程是开发分布式应用程序的重要技能,它通过套接字(Socket)进行数据传输,支持TCP和UDP协议。本文将介绍Java网络编程的基础知识,包括Socket、ServerSocket、TCP通信、UDP通信、常用类和示例代码。网络编程是指在计算机之间通过网络进行数据传输和通信的编程方式。Java提供了强大的java.net包,封装了底层的网络协议,简化了网络编程。:面向连接,可靠传输,保证数据按序到达,适合文件传输、Web通信等。:面向无连接,不可靠但速度快,适合视频通话、广播消息等。

武帝为此的博客 958

CGNS快速入门到实战(二):VS配置调用CGNS静态链接库

CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库;(三)CGNS文件及案例展示。本篇文章重点讲述VS配置调用CGNS静态链接库。

ahang_99的博客 2618

Java网络编程

Java网络编程 1、网络编程 1.1、概述 1、计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。 2、Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。 3、Java提供的网络类库,可以实现无痛的网络连

laizhenghua的博客 1万+

ELK 企业级日志分析系统(1)

ELK平台是一套完整的日志集中处理解决方案,将、Logstash和Kiabana三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。

云计算运维工程师的成长之路 1864

HDI盲埋孔设计规范:高速PCB信号完整性落地指南

盲埋孔是高密度互连(HDI)PCB实现高速信号完整性的关键技术,其本质是通过控制过孔stub长度、优化回流路径和提升布线密度,解决GHz级信号在传统通孔结构下出现的谐振、串扰与EMI超标问题。其设计核心在于叠层物理约束、电气参数建模与工艺能力协同,涉及stub长度计算、反焊盘尺寸推导、孔壁粗糙度Rz控制等关键指标。广泛应用于DDR4、PCIe Gen4、USB3.2等高速接口的PCB设计中,尤其在车载ADAS、5G基站及FPGA载板等对SI/PI要求严苛的场景中成为刚性门槛。

weixin_34416754的博客 438

Java语言的网络编程

Java网络编程是一个庞大而复杂的领域,从基本的Socket编程到高级的HTTP处理,Java提供了丰富的工具和类库供开发者使用。了解并掌握Java网络编程,可以帮助开发者构建可靠、高效的网络应用。随着技术的不断发展,网络编程的方法和工具也在不断进步,开发者应保持学习的热情与敏锐的观察力,跟上时代的步伐。希望通过本文的讲解,能帮助您对Java网络编程有更深的理解和认识。无论是构建简单的客户端-服务器模型,还是开发复杂的Web应用,Java都能提供强大的支持。

xiaocaibao777的博客 1218

基于PLC的冲压件自动生产线电气系统设计【附数据】

考虑到生产线的高效运行和维护简便性,选择了三菱FX系列的可编程逻辑控制器(PLC)作为核心控制单元,该型号的PLC因其高可靠性和强大的功能集,在工业自动化领域有着广泛的应用。最后,在完成初步的软件开发后,进行了多轮次的模拟测试和现场调试,逐步修正了存在的问题,最终达到了预期的功能要求。例如,对于进料环节,选用了光电传感器以精确检测物料的位置;此外,为了适应不同尺寸的工件加工需求,还特别设计了一套可调节的夹具系统,不仅提高了生产线的灵活性,同时也降低了更换模具的成本。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1294

Java—— 网络编程

什么是网络编程 常见软件架构 网络编程三要素:IP:InetAddress。端口号。协议:UDP协议,TCP协议

zjy_ccccc的博客 1254

uniapp - 超详细的 H5 公众号网页微信登录示例代码,提供从 0-1 公众号配置及详细注释代码(站在新手小白的角度)第三方微信授权登录的实现!!

uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录),uni-app开发H5第三方微信授权登录的实现,uniapp如何实现微信授权登录,公众号H5页面接入微信登录流程,uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级

✅ 精选推荐文章 1万+

Python之achatbot包语法、参数和实际应用案例

本书是一本PyTorch深度学习实战指南,分为基础(前6章)和进阶(后5章)两大部分。基础部分涵盖张量运算、神经网络、数据预处理及CNN等核心内容;进阶部分则深入图像、文本、音频建模技术,重点解析Transformer架构及大语言模型开发。全书采用"理论+实践"模式,适合从零基础到进阶的PyTorch学习者。

王国平的博客 632

Java基础之Java网络编程详解

网络编程是现代软件开发中不可或缺的一部分,它通过网络实现了计算机之间的通信,使得信息交换和数据共享成为可能。在网络通信的实现过程中,语言的选择和工具的使用至关重要,而Java提供了强大的支持,使得开发者可以更便捷地构建网络应用程序。网络通信的核心是数据的发送与接收,而Java的网络编程模型为此提供了一套易用且高效的工具。无论是点对点的通信,还是基于更复杂协议的多节点交互,Java都能满足需求。在网络编程中,基础的通信模式是基于Socket的点对点连接,它可以实现客户端和服务器之间的直接通信。

道可道非常道 2068

【Claude Code 源码解析教程】总体大纲

本教程旨在深入解析 Anthropic Claude Code 项目的源码架构和实现细节。Claude Code 是一个基于 TypeScript + Bun 构建的 AI 编程助手 CLI 工具,代号 "Tengu",具有复杂的多模块架构和丰富的功能特性。本教程基于Claude Code 的源码分析来生成,将帮助您全面掌握 Claude Code 的源码架构和实现细节,为开发类似 AI 编程助手工具奠定坚实基础。

rengang66的博客 388

【Java 基础】Java 网络编程

Java的网络编程是指使用Java语言进行网络通信的编程技术。在Java中,可以使用Socket和ServerSocket类来实现基于TCP协议的网络通信,也可以使用DatagramSocket和DatagramPacket类来实现基于UDP协议的网络通信。

激流丶的博客 1890

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

十二、Java网络编程

文章目录十二、Java网络编程1.网络编程入门1.1 网络编程概述【理解】1.2 网络编程三要素【理解】1.3 IP地址【理解】1.4InetAddress【应用】1.5端口和协议【理解】2.UDP通信程序2.1 UDP发送数据【应用】2.2UDP接收数据【应用】2.3UDP通信程序练习【应用】3.TCP通信程序3.1TCP发送数据【应用】3.2TCP接收数据【应用】3.3TCP通信程序练习【应用】3.4TCP通信程序练习【应用】3.5TCP通信程序练习【应用】3.6TCP通信程序练习【应用】3.7TCP通

汪随安的博客 2919

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

12 java网络编程

网络编程章节,主要是把IO流的知识使用在网络上,用于网络传输。 网络传输其实也是一种IO流的方式。

qq_34106499的博客 415

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java 之网络编程

本文详细讲解了 Java 网络编程的基础知识和实战代码,包括 TCP 和 UDP 的区别、网络编程的三要素以及使用 Socket 和 DatagramPacket 类实现网络通信。希望这些内容能够帮助各位看官深入了解 Java 网络编程。

weixin_64178283的博客 1834

Java 网络编程

Java通过java.net和java.nio包提供网络编程支持,支持TCP和UDP协议。TCP使用Socket实现可靠连接通信,包含ServerSocket(服务端)和Socket(客户端);UDP通过DatagramSocket实现无连接通信。示例代码展示了基本的TCP/UDP服务端与客户端实现流程,包括建立连接、数据收发等关键步骤。此外,Java还提供HttpURLConnection类专门处理HTTP协议通信,可方便地发起HTTP请求。这些API为开发网络应用提

weixin_73916358的博客 564
上一篇: JAVA IO
下一篇: JAVA 集合框架总结
SetO2
博客等级 码龄12年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值