`

Java Socket网络编程

    博客分类:
  • Java
阅读更多

   1.  Ip地址,域名和端口号

      JDK的java.net包中定义了与IP地址/域名有关的类

       1.java.net.InetAddress

        32位或128位无符号数字表示的IP地址。

       2.java.net.Inet4Address

        继承了InetAddress类,以32位无符号数字表示的IPv4地址。

       3.java.net.Inet6Address

        集成了InetAddress类,以128为无符号数字表示的IPv6地址。

public class TestInetAddress {

	public static void  main(String args[]){
		try {
			InetAddress ia = InetAddress.getLocalHost();
			showInfo(ia);
			ia = InetAddress.getByName("www.sina.com");
			showInfo(ia);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}
	public static void showInfo(InetAddress ia){
		String name = ia.getHostName();
		String address = ia.getHostAddress();
		print("name:" + name);
		print("address:" + address);
	}
     public static  void print(Object o){
    	 System.out.println(o);
     }
}

    运行结果:

 

name:QQ-PC
address:60.166.219.14
name:www.sina.com
address:61.172.201.195

2. URL 

   URL(Uniform Resource Locator,统一资源定位器)用于表示Internet上资源的地址。

   URL格式:<协议名><资源所在主机名>[:<端口号>]<资源名>

                    http://home.netscape.com/home/welcome.html

    java.net包定义了对应的URL类,常用方法如下:

    public URL(String spec)

    public final InputStream openStream() throws IOException

public class URLReader {
	public static void main(String args[]){
		URL url;
		try {
			url = new URL("http://www.baidu.com");
			BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
			
			String s = reader.readLine();
			while(null != s){
				System.out.println(s);
				s = reader.readLine();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

   运行结果:

<!doctype html><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>百度一下,你就知道 

  3 Socket编程

   两个进程间可以通过一个双向的网络通信连接实现数据交换,这种通信链路的端点被称为“套接字”(Socket)

    Socket通常用来实现Client-Server连接。

    建立连接时所需的寻址信息

      1.远程计算机的机器名或IP地址

      2.试图连接的端口号(Port number)

     java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端。在Socket和ServerSocket类常用的构造方法如下:

      Socket(InetAddress address,int port) throws IOException;

      Socket(String host,int port) throws IOException

      ServerSocket(int port) throws IOException

      ServerSocket(int port,int backlog) throws IOException

 Socket网络编程可分为四个基本步骤:

    1.  建立网络连接。

    2.  打开连接到Socket

    3. 通过打开的I/O流进行数据读/写操作

    4. 关闭已打开的I/O流和Socket

   Server:

public class TestServer {
	public static void main(String args[]){
		ServerSocket server;
		try {
		server = new ServerSocket(8888);
		System.out.println("Server is running!");	
		while(true){
			Socket s1 = server.accept();//如果没有客户端进来,将会处于阻塞状态
			OutputStream os =  s1.getOutputStream();
			DataOutputStream dos = new DataOutputStream(os);
			dos.writeUTF("Hi,Client Address is:" + s1.getInetAddress() + "\tClient port:" + s1.getPort());
			dos.writeUTF("byte!");
			dos.close();
			s1.close();
		}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

    Client:

public class TestClient {
	public static void main(String args[]) {
		Socket client;
		try {
			client = new Socket("127.0.0.1", 8888);
			InputStream is = client.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			print(dis.readUTF());
			print(dis.readUTF());
			dis.close();
			client.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void print(Object o) {
		System.out.println(o);
	}
}

  应该先运行Server,然后在运行Client。

简单的聊天程序

  Server:

public class TestServerChat {
	public static void main(String args[]){
		try {
			ServerSocket server = new ServerSocket(8888);
			Socket s1 = server.accept();
			OutputStream os = s1.getOutputStream();
			DataOutputStream dos = new DataOutputStream(os);

			InputStream is = s1.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

			String info;
			while(true){
				info = dis.readUTF();
				print("Client:" + info);
				if(info.equals("byte")){
					break;
				}
				info = reader.readLine();
				dos.writeUTF(info);
				if(info.equals("byte")){
					break;
				}
			}
			dis.close();
			reader.close();
			server.close();
			os.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void print(Object o){
		System.out.println(o);
	}
}

 Client:

public class TestClientChat {
	public static void main(String args[]) {
		Socket client;
		try {
			client = new Socket("127.0.0.1", 8888);
			InputStream is = client.getInputStream();
			DataInputStream dis = new DataInputStream(is);

			OutputStream os = client.getOutputStream();
			DataOutputStream dos = new DataOutputStream(os);

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					System.in));

			String info;
			while (true) {
				info = reader.readLine();
				dos.writeUTF(info);
				if (info.equals("byte")) {
					break;
				}
				info = dis.readUTF();
				print("Server:" + info);
				if (info.equals("byte")) {
					break;
				}
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void print(Object o) {
		System.out.println(o);
	}
}

 此简易聊天程序有很大的局限性,仅可以一人一句。

 

 

 

分享到:
评论

相关推荐

    JAVA Socket 网络编程教程

    Java Socket网络编程是Java开发中一个重要...Java Socket编程是构建网络应用的基础,掌握其原理和实践方法对于开发分布式系统、网络服务等至关重要。通过不断实践和学习,开发者可以更熟练地运用Socket来解决实际问题。

    Java socket网络编程的基础示例

    在Java中,我们可以使用`java.net.Socket`类和`java.net.ServerSocket`类来实现TCP Socket编程。`ServerSocket`用于监听客户端的连接请求,`Socket`则代表一个客户端连接。以下是一个简单的TCP服务器端和客户端示例...

    Java Socket网络编程.pdf

    Java的Socket编程接口提供了丰富的功能,包括错误处理、套接字选项设置等,使得开发者能够构建复杂、可靠的网络应用。同时,Java的异常处理机制也为网络编程提供了良好的健壮性。在实际开发中,还需要考虑线程管理、...

    JAVA Socket 网络编程

    Socket编程提供了在不同网络节点间进行数据传输的基础,它是基于TCP/IP协议族的,确保了数据的可靠传输。 首先,我们来理解Socket的基本概念。Socket在计算机网络中可以看作是两个应用程序之间建立通信的端点,它...

    基于java socket网络编程实现的五子棋游戏,可多人在线玩耍,聊天

    首先,我们来深入理解Java Socket编程。Socket是网络通信中的端点,它允许两台计算机(或者网络上的任何其他设备)通过TCP/IP协议进行通信。在Java中,`java.net.Socket`和`java.net.ServerSocket`类是实现Socket...

    Java Socket网络编程研究.pdf

    在Java中,Socket编程是实现网络通信的基本手段,它允许应用程序之间通过网络进行数据交换。本文将详细探讨Java Socket网络编程中的关键知识点。 首先,我们回顾一下网络通信的发展历史。通信技术的发展经历了从...

    Java Socket 网络编程

    Java Socket网络编程是Java平台中实现网络通信的基础组件,它提供了低级别的、面向连接的、可靠的字节流通信。在本教程中,我们将探讨如何利用Java Socket构建一个多客户端与单服务器的聊天应用,同时实现客户端之间...

    java-socket网络编程(tcp)

    在Socket编程中,必须妥善处理各种网络异常,如`IOException`,确保程序的健壮性。例如,当网络中断或服务器关闭时,需要捕获并适当地处理异常。 7. **阻塞与非阻塞模式** 默认情况下,Socket和ServerSocket操作...

    基于java socket网络编程实现的简单模拟qq聊天的程序,可实现并发聊天

    Java Socket网络编程是Java语言中实现网络通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务。在这个基于Java Socket实现的简单模拟QQ聊天程序中,我们主要探讨以下几个核心知识点: 1. **Socket原理**...

    Java Socket网络编程初级入门

    Java Socket网络编程是Java开发中实现网络通信的基础,它提供了客户端和服务器端进行数据交换的接口。在Java SDK中,`java.net`包包含了Socket相关的API,使得开发者能够轻松地进行网络编程。 首先,要理解网络编程...

    java socket网络编程代码(服务端和客户端)

    在Java Socket编程中,重要的是理解I/O流的概念,因为数据是以字节流的形式在网络中传输的。同时,为了提高服务器的并发能力,通常会为每个客户端连接创建新的线程或使用线程池来处理请求。在实际项目中,还需要考虑...

    JAVA Socket网络编程分析

    在Java Socket编程中,常用的设计模式是客户端/服务器(C/S)结构。服务器端创建ServerSocket,监听特定端口,当客户端通过Socket发起连接请求时,服务器响应并创建新的Socket进行通信。在多线程环境下,服务器可以...

    基于Java Socket网络编程的基础性应用研究.pdf

    Socket编程是Java网络编程的核心内容之一,其应用范围广泛,包括但不限于即时通讯、文件传输、网络游戏等多个领域。通过本文的学习,开发者可以掌握基于Java Socket的网络编程基础,并将其应用于实际开发项目中。...

    基于java socket网络编程实现的五子棋游戏,可多人在线玩耍

    在这个五子棋游戏中,Socket编程被用来连接多个玩家,使得他们可以在线对战。 首先,我们要理解Java Socket的基本概念。Socket是网络通信中的一个端点,它允许两个应用通过网络进行数据交换。一个Socket由IP地址和...

    Java Socket网络编程研究.zip

    Java Socket网络编程是Java开发中的重要组成部分,它允许应用程序通过网络进行通信,实现客户端与服务器之间的数据交换。在本文中,我们将深入探讨Java Socket的基本概念、工作原理以及如何使用Socket进行实际的网络...

    基于Java Socket网络编程的基础性应用研究.zip

    在进行Socket编程时,需要处理IOException,因为网络通信过程中可能出现各种错误,如连接超时、网络中断等。合理的异常处理可以确保程序的健壮性。 五、多线程与Socket 在实际应用中,服务器通常需要同时处理多个...

    Java Socket网络编程实例.pdf

    这个实例展示了Java Socket编程的基本流程,包括服务器端的监听、连接、数据交换,以及客户端的连接、发送数据和接收响应。这种模式广泛应用于各种网络应用,如聊天室、文件传输、远程控制等。通过理解这个实例,...

    读书笔记:C++&amp;&amp;Java socket网络编程 学习socket 案例快速入手.zip

    读书笔记:C++&amp;&amp;Java socket网络编程 学习socket 案例快速入手

Global site tag (gtag.js) - Google Analytics