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();
}
}
}
分享到:
相关推荐
理解并掌握这部分知识对于进行Java网络编程至关重要,特别是当需要开发基于TCP/IP协议的应用时。在实际项目中,可能还需要考虑异常处理、安全通信(如SSL/TLS)、性能优化(如缓冲区大小调整)等更高级的话题。
Java Socket通信是网络编程中的基础概念,主要用于实现客户端与服务器之间的双向通信。在这个"JAVA Socket通信示例"中,我们可能会看到如何通过...这将有助于你掌握Java网络编程的基础,并为开发更复杂的应用奠定基础。
Java中的Socket网络通信是基于TCP/IP协议的一种实现进程间通信的方式。这个压缩包包含了一些基本的Java Socket编程示例,包括服务端(Server)和客户端(Client)的代码以及一些辅助图片,如“连接.png”、“服务端....
通过这个入门例子,初学者可以理解Java Socket编程的基本原理和操作步骤,为进一步的网络编程打下坚实的基础。实际开发中,还可以结合NIO(非阻塞I/O)或其他高级框架如Netty,提高网络通信的效率和灵活性。
Java Socket是Java编程语言中用于实现网络通信的一种基础工具,它允许两个应用程序通过TCP/IP协议进行数据交换。在这个"java socket 客户端和服务端例子"中,我们有两个主要组件:服务端(server)和客户端(client...
Java Socket编程是网络编程的基础,它提供了两台计算机之间的低级别通信接口。在这个例子中,我们将探讨如何使用Java Socket进行数据的发送和接收。Socket在Java中被封装在`java.net.Socket`和`java.net....
Java Socket通信程序源码是Java网络编程中一个重要的学习领域,它主要用于实现两台计算机之间的数据传输。在Java中,Socket是基于TCP/IP协议的一种低级通信机制,它提供了进程间网络通信的能力。本篇文章将深入探讨...
在Java编程中,TCP(传输控制协议)是一种用于网络通信的可靠、面向连接的协议,广泛应用于各种系统间的数据交换。本示例将探讨如何在Java中实现简单的TCP通信,以建立一个通讯录服务作为应用实例。我们将涵盖以下几...
Socket,也被称为套接字,是网络通信中的一个重要接口,它为两台计算机提供了一个低级别的、进程到进程的通信机制。在Java中,Socket类位于java.net包下,提供了面向连接的TCP协议的实现。 二、TCP与UDP协议 1. TCP...
Java Socket通信实现是Java网络编程中的重要组成部分,它允许两台计算机通过TCP/IP协议进行双向通信。Socket在Java中提供了低级别的、面向连接的、基于流的通信接口,是构建客户端-服务器应用程序的基础。 首先,...
本篇文章将深入探讨Java中的网络通信机制,包括标准Java接口、Apache HttpClient、Socket通信以及Android平台上的网络接口等内容。 #### 二、标准Java接口 Java标准库提供了`java.net.*`包,该包包含了用于网络...
Java的Socket编程是网络通信的基础,它允许两个网络应用程序之间建立连接并进行数据交换。在本项目中,"基于Java的socket的网络聊天程序"是一个初级程序员使用Java Socket API实现的练习项目,旨在理解并应用网络...
这个socket通信比较直观,比较容易看懂,实现了Java中的socket的通信问题。是Java网络编程的一个比较不错的例子!
以下将详细阐述Java网络编程的基础概念、核心组件以及如何创建一个简单的Socket通信实例。 1. **Java网络编程基础** Java网络编程是利用Java提供的API来处理网络连接和数据传输的过程。它基于TCP/IP协议栈,可以...
在这个简单的例子中,我们将探讨Java如何实现网络通信,主要包括Socket编程、ServerSocket、URL连接以及输入/输出流的使用。 1. **Socket编程**:Socket是网络通信的基本单元,它提供了进程间的双向通信通道。在...
Socket是网络通信的基本单元,它提供了进程间通信(IPC)的能力,特别是在网络环境中的进程通信。在Java中,`java.net.Socket`和`java.net.ServerSocket`是进行TCP/IP通信的核心类。 标题中的“最简单的Java Socket...
JAVA网络通信系统的研究与开发是信息技术领域中的一个重要课题,它涉及到如何使用JAVA语言构建网络通信应用,以便实现在互联网上的信息交互。JAVA网络通信系统通常包括客户端和服务器端的架构,允许用户通过网络进行...
线程用于实现并发处理,而Socket则是网络通信的基础。本教程通过具体的示例代码来讲解这两个概念的使用。 首先,我们来看看“线程”(Thread)。线程是程序执行的最小单位,一个进程可以有多个线程,它们共享同一份...
在这个名为"网络通信socket全面源代码"的压缩包中,我们可以期待找到一系列关于如何使用Socket进行网络编程的实例。这个资源对初学者和经验丰富的开发者来说都是宝贵的,因为它提供了实际操作的例子,帮助理解网络...
Socket客户端程序是Java编程语言中实现网络通信的基础组件,它基于TCP/IP协议栈,用于创建两个应用程序之间的连接,使得数据可以在它们之间传输。在Java中,`java.net.Socket`类和`java.net.ServerSocket`类是实现...