java—网络通信socket的例子

Java Socket应用 网络通信 【 socket 】


第一节:网络基础知识
第二节:InetAddress 类:
此类表示互联网协议 (IP) 地址。

InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。


例子:

package inetaddreaa;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressDom {

	public static void main(String[] args) {
		
		try {
			//根据本机 InetAddreaa 获取信息
			InetAddress address = InetAddress.getLocalHost();
			System.out.println("本机名字:" + address.getHostName());
			System.out.println("IP地址:" + address.getHostAddress());
			System.out.println("对象的原始 IP地址:"+address.getAddress());
			//看API文档
			
		} catch (UnknownHostException e) {		
			e.printStackTrace();
		}
	}

}


第三节:URL常用使用方法:
理解:URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。
协议为: http (超文本传输协议)。
资源:www.imooc.com

端口:8080

例子:

package url;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class URLDom {
	public static void main(String[] args) {

		try {
			//实例化URL			
			URL url= new URL("http://www.baidu.com");
			//输入流
			InputStream is = url.openStream();
			//将输入流转换为字符流
			InputStreamReader isr = new InputStreamReader(is,"utf-8");
			//为字符流添加缓冲流
			BufferedReader br = new BufferedReader(isr);
			//读取数据
			String date = br.readLine();
			//输出 行
			while( date != null ){
				System.out.println(date);
				date=br.readLine();
			}
			//关闭资源
			br.close();
			isr.close();
			is.close();

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}


第四节:TCP 编程 【 传输控制协议 】
概念:传输层,以字节流的方式发送数据。

是一种面向连接的、可靠的、基于字节流的传输层通信协议。


服务器端【ServerSocket】
1.创建服务器端,并制定绑定端口。
2.调用 accept() 方法调用 accept() 方法侦听并接受的连接。
3.获取输入流,并读取客户端信息。
4.获取输出流,向客户端端发送信息 。

5.先关闭输入流,关闭资源。


客户端【Socket】
1.创建客户端,制定服务器地址和端口 。
2.获取输出流,向服务器端发送信息 。
3.获取输入流,并读取服务器信息。

4.先关闭输出流,流关闭资源。


TCP 编程之多线程连接:
基本步骤:
1.服务器端创建ServerSocket,循环调用accept() 等待客户端连接。
2.客户端很粗昂贱一个socket并请求和服务器端连接。
3.服务器端接受客户端的请求,创建socket与客户端建立专线连接。
4.建立连接的两个socket在一个单独的线程上对话。

5.服务器端需继续等待新的连接。

例子:


1、服务器端

package tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String[] args) {
		
		try {
			//1创建服务器,并制定绑定端口
			ServerSocket ss = new ServerSocket(8080);
			//2调用accept()方法侦听并接受的连接。
			System.out.println("***服务器已经启动,等待客户端连接***");
			Socket sk = ss.accept();
			//3获取输入流,获取客户端信息
		    InputStream is = sk.getInputStream();
		    //转换字符流
		    InputStreamReader isr = new InputStreamReader(is);
		    //4为输入流添加缓冲
		    BufferedReader br = new BufferedReader(isr);
		    //输出
		    String io=null;
		    //5获取客户端信息
		    while( (io=br.readLine()) != null){
		    	System.out.println("我是服务器,然后客户端说:" + io);
		    	io=br.readLine();
		    }
		    //关闭输入流
		    sk.shutdownInput();
		    
		    
		    //获取输出流,向客户端发送信息
		    OutputStream ops= sk.getOutputStream();
		    //打印流
		    PrintWriter pw = new PrintWriter(ops);
		    pw.write("您好!欢迎您!");
		    //清空缓冲区数据
		    pw.flush();	
		    
		    //关闭资源
		    ops.close();
		    pw.close();
		    br.close();
		    isr.close();
		    is.close();
		    sk.close();
		    ss.close();
					
		} catch (IOException e) {			
			e.printStackTrace();
		}

	}

}


2、客户端

package tcp;

import java.io.*;
import java.net.*;

//还有一种就是和多线程结合在一起 

public class ServerConter {

	public static void main(String[] args) {
		
		try {
			//创建客户端Socket,指定服务器端口,地址
			Socket sr = new Socket("localhost",8080);
			//获取输出流,向服务器发送信息
		    OutputStream ops = sr.getOutputStream();
			//打印流
		    PrintWriter pw = new PrintWriter(ops);
		    //字符输出流
		    pw.write("用户名:陈郑游;密码:123");		  
		    //清空缓冲区数据
		    pw.flush();
		    //关闭输出流
		    sr.shutdownOutput();
		    
		    //获取输入流,读取服务器的信息
		    InputStream ips = sr.getInputStream();
		    //InputStreamReader isr = new InputStreamReader(ips);
		    BufferedReader buf = new BufferedReader(new InputStreamReader(ips));		    
		    String io=null;
		    //获取客户端信息
		    while( (io=buf.readLine()) != null){
		    	System.out.println("我是客户端,然后服务器说:" + io);
		    	io=buf.readLine();
		    }
		    //关闭资源
		    ips.close();
		    buf.close();
		    pw.close();
		    ops.close();
		    sr.close();
			
		} catch (UnknownHostException e) {			
			e.printStackTrace();
		} catch (IOException e) {		
			e.printStackTrace();
		}

	}

}


第五节:UDP 编程
理解:UDP协议是无连接,不可靠,无序的。
DategramPacket:数据包

DataGrmSocket:进行通信到端口的通信的类


实现步骤:
服务器端:
1,创建DatagramSocket,指定端口号。
2,创建DatagramPacket。
3,接受客户端发送的数据信息。
4,读取客户端数据。

5,关闭资源。

客户端:
1,定义服务器的地址,端口号,数据,发送信息。
2,创建DatagramPacket,包含将要发送的信息。
3,创建DatagramSocket。
4,向服务器端发送数据。

5,关闭资源。


例子:

1、服务器端

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Server {
    public static void main(String args[]){
    	
    	try {
    		/*接收客户端响应*/   		
    		//1,创建DatagramSocket,指定端口号。
			DatagramSocket socket = new DatagramSocket(8888);
			//2,创建DatagramPacket。
			byte date[] = new byte[1020];
			DatagramPacket packet = new DatagramPacket(date, date.length);
			System.out.println("***服务器已经启动,等待客户端连接***");
			//3,接受客户端发送的数据信息。		
			socket.receive(packet); //接收之前一直堵塞
			//4,读取数据。
			String info = new String(date, 0, packet.getLength());
			System.out.println("我是服务器,客户端说:" + info);
			//
			socket.close();
						
			/*向客户端发送响应*/			
			//1,定义客户端的地址,端口号,数据,发送信息。
			InetAddress iass = packet.getAddress();
			//地址
			int port=8888;  
			byte date2[] ="服务器说:欢迎您!".getBytes();  //转换为字节数组
			//2,创建DatagramPacket,包含将要发送的信息。
			DatagramPacket packet1 = new DatagramPacket(date2, date2.length, iass, port);
			//3,创建DatagramSocket。
			DatagramSocket soc = new DatagramSocket();
			//4,向客户端端发送数据。				
			soc.send(packet1);	
			
				
		} 
    	catch (SocketException e) {			
			e.printStackTrace();
		}
    	catch (IOException e) {				
			e.printStackTrace();
		}		
    }

	
}

2、客户端

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Socket {

	public static void main(String[] args) {
		
		try {
			/*向服务器端发送响应*/			
			//1,定义服务器的地址,端口号,数据,
			InetAddress inet =InetAddress.getByName("localhost");
			//地址
			int port=8888;  
			byte date1[] ="用户名:小游;密码:888".getBytes();  //转换为字节数组
			//2,创建DatagramPacket,包含将要发送的信息。
		    DatagramPacket packet = new DatagramPacket(date1, date1.length, inet, port);		   		    
		    //3,创建DatagramSocket。
			DatagramSocket socket = new DatagramSocket();
			//4,向服务器端发送数据。				
			socket.send(packet);
							      					
			/*接收服务器端的响应*/			
			byte date2[] = new byte[1020];
			//1,创建DatagramPacket。
			DatagramPacket packet2 = new DatagramPacket(date2, date2.length);
			//2,接受服务器端发送的数据信息。		
			socket.receive(packet2);
			//3,读取数据。
			String info2 = new String(date2, 0, packet2.getLength());
			System.out.println("我是客户端,服务器说:" + info2);
			//4,关闭资源
			socket.close();
			
		    } 
		catch (UnknownHostException e) {
			e.printStackTrace();
		}
		catch (SocketException e) {				
			e.printStackTrace();
		}
	    catch (IOException e) {				
			e.printStackTrace();
		}		  
	}

}



生信小白必看:手把手教你用R语言实现counts/FPKM/TPM互转(附代码) 本文为生信初学者详细讲解如何使用R语言实现counts、FPKM和TPM三种转录组表达量单位的精准转换,包含完整代码示例和常见问题解决方案。重点解析了FPKM与TPM的数学原理及转换方法,帮助读者掌握RNA-seq数据分析中的关键预处理步骤,提升差异表达分析的准确性。 阅读详情

相关推荐

单片机按键识别篇---单击---双击----长按

  最近做一任务需要使用一个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复用情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,又上网看了些例程,算是对于按键的识别有点小小的了解,感觉这个功能挺实用,在此做个随笔。 一、思路   1.识别长按操作思路:我们使用系统定时器定时,然后让系统每过一段时间去扫描按键I/O...

weixin_30311605的博客 3660

基于java socket来进行网络通信的小例子

在之前分析zookeeper源码的过程当中,有两个地方使用到了基于java socket进行通信的地方 第一个地方是在集群启动时,集群节点之间会发起leader投票选举,此时zookeeper底层是基于java socket来进行网络通信的,感兴趣的小伙伴可以看手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的)这篇文章 第二个地方是当集群中新加入一个zk节点或者某个节点宕机恢复启动的时候,需要恢复数据,并且从leader中同步..

badly的博客 401

扩增子测序|iCAMP包——基于系统发育零模型分析确定性和随机性在群落构建过程R中实践

iCAMP的核心功能是通过系统发育分箱的零模型分析,量化不同生态过程的相对重要性。,用于评估不同生态过程(同质选择、异质选择、扩散和漂变)对整个群落及各个系统发育分箱(bin)的相对重要性。该方法也成为nature,science系列文章的常客,深受大家喜欢,在文章中运用该方法将为论文增色不少。外环和内环的圆环图显示了每个门(或变形菌门的分类)中不同过程的相对重要性。中央是系统发育树,内环展示了不同过程的相对重要性,表示每个系统发育箱中的DL。示例代码中提供了数据和代码,已经小编测试,可直接运行。

weixin_46814750的博客 6245

java笔记—网络通信socket的例子

Java Socket应用 网络通信 【 socket 】 第一节:网络基础知识 第二节:InetAddress 类: 此类表示互联网协议 (IP) 地址。 InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决...

chihuo2428的博客 150

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下...

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下 CT Image with Window presets This is an example of displaying a ct image along with buttons to set ww/wc pres...

浩秦的博客 1842

Qt多线程实战:如何优雅地处理Modbus设备通信中的线程安全问题

本文深入探讨了在Qt框架下实现Modbus设备通信时的多线程安全问题,提供了优雅的解决方案。通过生产者-消费者模型、任务队列与锁机制等设计模式,有效解决了界面卡顿、数据包错乱等问题。文章还详细介绍了对象生命周期管理、信号槽连接类型选择等关键实现细节,帮助开发者构建稳定可靠的Modbus通信模块。

weixin_30897233的博客 488

Java 中通信接口

你这个程序使用的是UDP 协议:用于发送和接收数据包(Socket 实例):用于封装发送或接收的数据内容JavaSocket:表示客户端或服务端通信时的“套接字”:服务端专用,用于监听客户端连接请求。

yualian的博客 915

短信验证码逻辑漏洞学习——各种绕过姿势技巧

短信验证码逻辑漏洞学习——各种绕过姿势技巧

记录并分享学习安全的知识点.. 2557

Java中Socket通信

简介Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求。 在Java中,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端

little_nai的博客 392

效果炸裂_安装midscene_copw基于midscene操作电脑_基于视觉的软件测试执行_MIDSCENE的安装和使用---AI大模型应用探索0012

摘要:本文介绍了如何通过安装MidSceneJS来增强Copaw的屏幕操作能力。首先需要安装Node.js和npm,并配置淘宝镜像源加速安装。然后全局安装MidScene CLI工具(npm install @midscene/cli -g)。接着配置视觉大模型服务,通过设置环境变量指定模型API密钥、名称、基础URL和家族类型(如qwen3.5-27b),配置文件需存放在C:\Users\Administrator.copaw目录。安装成功后,MidScene已能成功识别并操作屏幕,使用效果良好。文中还提

添柴程序猿的专栏 644

【全网首发】2026华为OD双机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

算法大师! 8814

python java 用socket通信

python 客户端 代码 import socket import sys # ip为string, port 为int, msg为string def socket_client(ip, port, msg): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(...

julicliy的博客 313

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java 服务端 c_java socket与 c socket通讯 java服务端

Jclient.java: publicclassJclient{ publicstaticvoidmain(String[]args){ SocketJavaSocket=null; DataOutputStreamos=null; DataInputStreamis...

weixin_36316102的博客 85

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

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

php socket java_java与php通过socket通信的实例教程

demo实现的简单功能是,接受PHP端写入的字符串,然后原样返回给输出端。代码如下:代码如下:import java.io.*;import java.net.*;publicclassServer {publicstaticvoidmain(String[] args) throws IOException{System.out.println("Server started !\n");Ser...

weixin_29876033的博客 180

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java socket 服务器多线程 数据转发的研究实践

项目中借鉴了以下资料: https://www.cnblogs.com/whenever/p/5526420.html   https://www.cnblogs.com/jpwz/p/5715852.html   https://www.cnblogs.com/sddychj/p/6102192.html   https://zzk.cnblogs.com/s/blogpost?K...

weixin_33971977的博客 98

【android】Socket简单用法

转自:http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示。值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装

baidu_15368407的专栏 284

java客户端和服务端使用实例_Java基于socket实现的客户端和服务端通信功能完整实例...

本文实例讲述了Java基于socket实现的客户端和服务端通信功能。分享给大家供大家参考,具体如下:以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行ChatClient.java客户端实例ChatClient.javapackage socketDemo;import java.awt.*;import java.awt.event.*;import ja...

weixin_42127775的博客 179

Socket简单用法

Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示。值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用起来很方便!     下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现了多线程机制,可以在特定端口处监

448

不允许对非连接的套接字执行操作_Java Socket:飞鸽传书的网络套接字

在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快、会辨认方向的优点,对其进行了驯化,用来进行消息的传递——也就是所谓的“飞鸽传书”。而在 Java 中,网络套接字(Socket)扮演了同样的角色。套接字(Socket)是一个抽象层,应用程序可以通过它发送或接收数据;就像操作文件那样可以打开、读写和关闭。套接字允许应用程序将 I/O 应用于网络中,并与其他应用程序进行通信。网络套接字是...

weixin_39962675的博客 315

flex与java之间socket通信的教程1

(一)连接   目的:实现flex和java的连接   服务端代码:Server1.java   ===============================================================================     import java.net.*; &nbs...

saimens 171

Java Socket编程 标准范例(多线程)

服务器端(Server)非多线程[java]view plaincopypackage com.zeph.serverclient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; i...

weixin_33701251的博客 73

Java高级编程 第6章 习题1

1 通过getLocalHost()获得一个本地IP的InetAddress对象,调用相应的方法依次输出本地机的计算机名、IP地址、全限定域名、toString()、对象本身、5秒是否可达等信息。如图所示。 2通过getByName()获得一个指定域名为“www.peizheng.edu.cn”的InetAddress对象,调用相应的方法依次输出指定地址的计算机名、IP地址、全限定域名、toString()、对象本身、5秒是否可达等信息。如图所示。 3创建一个URL地址为:“年度书单”聚焦中国

weixin_48215313的博客 312

python用socket传输json格式数据给java

py和java的网络编程

weixin_46009432的博客 1119

java,仿qq,socket,tcp连接做出一个聊天室

java,仿qq,socket,tcp连接做出一个即时通讯软件 import java.io.DataInputStream;//导入DataInputStream类 import java.io.DataOutputStream;//导入DataOutputStream import java.io.IOException;//导入IOException类 import java.net.Socket;//导入Socket类 import java.util.Scanner;//导入Scanner类 首

诗一样的代码 415
上一篇: 数据结构—逆序输出
下一篇: java—网络通信socket的例子
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值