`
阅读更多
1. URL
类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。有关 URL 的类型和格式的更多信息,可从以下位置找到:
     http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html
通常,URL 可分成几个部分。上面的 URL 示例指示使用的协议为 http (超文本传输协议)并且该信息驻留在一台名为 www.socs.uts.edu.au 的主机上。主机上的信息名称为 /MosaicDocs-old/url-primer.html。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径 部分。
URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http 协议的默认端口为 80。还可以指定一个备用端口,如下所示:
     http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html
下面是一个在百度搜索Java时的一些信息反馈。
package com.java.net;

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

/**
 * 通过连接百度来读取相关内容 
 * @author Yuanbo Han
 *
 */

public class _URL {
	public static void main(String[] args) throws IOException {
		String httpStr = "http://www.baidu.com/s?wd=Java";
		URL url = new URL(httpStr);
		System.out.println("httpStr:\t" + httpStr);
		System.out.println("authority:\t" + url.getAuthority());
		System.out.println("content:\t" + url.getContent());
		System.out.println("port:\t\t" + url.getDefaultPort());
		System.out.println("file:\t\t" + url.getFile());
		System.out.println("host:\t\t" + url.getHost());
		System.out.println("path:\t\t" + url.getPath());
		System.out.println("protocol:\t" + url.getProtocol());
		System.out.println("query:\t\t" + url.getQuery());
		System.out.println("ref:\t\t" + url.getRef());
		System.out.println("userinfo:\t" + url.getUserInfo());
		
		
		System.out.println("\n\n-------------------- get the content --------------------");
		BufferedReader reader = null;
		try {
			String line = "";
			reader = new BufferedReader(new InputStreamReader(url.openStream()));
			while((line = reader.readLine()) != null){
				System.out.println(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if(reader != null){
				try {
					reader.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

结果:
httpStr: http://www.baidu.com/s?wd=Java
authority: www.baidu.com
content: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@157f0dc
port: 80
file: /s?wd=Java
host: www.baidu.com
path: /s
protocol: http
query: wd=Java
ref: null
userinfo: null


-------------------- get the content --------------------
<!DOCTYPE html><!--STATUS OK--><html><head>
<meta http-equiv="X-UA-Compatible" content="IE=7">
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<title>百度搜索_Java      </title>
<style>
body,td,.p1,.p2,.i{font-family:arial}
body{margin:0;padding:6px 0 0 0;background-color:#fff;color:#000;position:relative}
input{padding-top:0;padding-bottom:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
table{border:0}
...
(内容很多,省略。。)

2. Socket通信(以简单的通信为例)
服务器端将客户端输入的信息以大写的形式返给客户端。
package com.java.net;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {
	
	public static void echo(){
		Socket socket = null;
		try {
			socket = new Socket("localhost",4444);
			Scanner fromServer = new Scanner(socket.getInputStream());
			System.out.println(fromServer.nextLine());//打印服务器给用户的提示信息
			PrintStream toServer = new PrintStream(socket.getOutputStream(), true);
			
			Scanner in = new Scanner(System.in);
			while(in.hasNextLine()){
				String input = in.nextLine();
				toServer.println(input);
				String output = fromServer.nextLine();
				System.out.println(output);
				if(output.toLowerCase().equals("bye")){
					System.out.println("\nNow is disconnected from server...");
					break;
				}
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				if(socket != null){
					socket.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		echo();
	}
}


package com.java.net;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
	
	public static void waitForConnect(){
		System.out.println("---- The server is waiting for the clients to connect ----");
		ServerSocket server = null;
		try {
			server = new ServerSocket(4444);
			Socket client = server.accept();
			System.out.println("Connected to one client ...");
			PrintWriter toClient = new PrintWriter(client.getOutputStream(),true);
			toClient.println("---- type quit or exit to disconnect to the server ----");

			
			Scanner fromClient = new Scanner(client.getInputStream());
			while(fromClient.hasNextLine()){
				String line = fromClient.nextLine();
				if(line.toLowerCase().equals("quit") || line.toLowerCase().equals("exit")){
					toClient.println("Bye");
					System.out.println("Disconnected to one client.");
					break;
				}
				toClient.println(line.toUpperCase());
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				if(server != null){
					server.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		waitForConnect();
	}
}


输出结果:

客户端:
---- type quit or exit to disconnect to the server ----
hello server
HELLO SERVER
i am hanyuanbo
I AM HANYUANBO
exit
Bye

Now is disconnected from server...


服务器端:
---- The server is waiting for the clients to connect ----
Connected to one client ...
Disconnected to one client.


运行以及显示过程:
(1). 服务器短开启程序。 这样在服务器端会有---- The server is waiting for the clients to connect ----的显示。
(2). 客户端开启程序。 这样在客户端会有---- type quit or exit to disconnect to the server ----的显示。同时服务器端会有Connected to one client ... 的显示。
(3). 当客户端输入数据的时候,同时会显示输入信息的大写形式从服务器端返回。这是服务器端没有任何显示。
(4). 当客户端输入exit的时候,客户端会有Bye的显示,同时会显示Now is disconnected from server...。在服务器端也会有Disconnected to one client.的显示。

3. 关于net中的DatagramSocket 和 DatagramPacket对于UDP的支持。
以下面简短的例子来说明。主要是用到了socket 中的send 和 receive方法。
package com.java.net;

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

public class _Client {
	static final int size = 256;
	
	public static void echo(){
		DatagramSocket socket = null;
		try {
			socket = new DatagramSocket();
			byte[] buf = new byte[size];
			InetAddress address = InetAddress.getLocalHost();
			send(socket, buf, buf.length, address, 4444);
			
			String initMsg = receive(socket, buf, buf.length);//
			System.out.println(initMsg);
			
			Scanner cin = new Scanner(System.in);
			while(cin.hasNextLine()){
				String str = cin.nextLine();
				if(!str.toLowerCase().equals("exit") && !str.toLowerCase().equals("quit")){
					buf = new byte[size];
					buf = str.getBytes();
					send(socket, buf, buf.length, address, 4444);
					
					
					String received = receive(socket, buf, buf.length);
					System.out.println(received);
				}else{
					break;
				}
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} finally{
			socket.close();
		}
	}
	
	public static String receive(DatagramSocket socket, byte[] buf, int length){
		String message = null;
		DatagramPacket packet = new DatagramPacket(buf, length);
		try {
			socket.receive(packet);
			message = new String(packet.getData(),0,packet.getLength());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return message;
	}
	
	public static void send(DatagramSocket socket, byte[] buf, int length, InetAddress address, int port){
		DatagramPacket packet = new DatagramPacket(buf, length, address, port);//用于发送数据包到指定主机的指定端口
		try {
			socket.send(packet);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		echo();
	}
}

package com.java.net;

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

import java.net.SocketException;

public class _Server {
	static final int size = 256;
	
	public static void waiting(){
		System.out.println("---- The Server is running ----");
		String initMsg = "Enter quit or exit to stop";
		DatagramSocket socket = null;
		byte[] buf = new byte[size];
		try {
			socket = new DatagramSocket(4444);
			DatagramPacket packet = new DatagramPacket(buf, buf.length);//用于接收数据包
			socket.receive(packet);
			InetAddress address = packet.getAddress();
			int port = packet.getPort();
			
			buf = initMsg.getBytes();//将字符串信息转换成byte数组
			send(socket, buf, buf.length, address, port);//发送初始提示信息给客户端
			
			for(;;){
				buf = new byte[size];//重新声明缓存
				packet = new DatagramPacket(buf,buf.length);
				socket.receive(packet);
				
				String fromClient = new String(packet.getData(),0,packet.getLength());
				System.out.println(fromClient);
				String toClient = fromClient.toUpperCase();
				buf = toClient.getBytes();
				send(socket, buf, buf.length, address, port);
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			if(socket != null){
				socket.close();
			}
		}
	}
	
	public static void send(DatagramSocket socket, byte[] buf, int length, InetAddress address, int port){
		DatagramPacket packet = new DatagramPacket(buf, length, address, port);//用于发送数据包到指定主机的指定端口
		try {
			socket.send(packet);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		waiting();
	}
}


结果:
(客户端)
Enter quit or exit to stop
nihao
NIHAO
hello
HELLO
hanyuanbo
HANYUANBO
quit
(服务器端)
---- The Server is running ----
nihao
hello
hanyuanbo

运行过程:
(1) 运行server程序,程序会打印出---- The Server is running ----。
(2) 运行client程序,程序会打印出Enter quit or exit to stop。
(3) 每当用户敲入内容,在客户端会返回大写,而在服务器端会显示用户的输入内容。
(4) 当用户输入quit(或者exit)时,客户端退出。

4.
5.
6.
7.
8.
9.
10.
分享到:
评论

相关推荐

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法 JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES错误是一种常见的网络编程错误,发生在Java应用程序中, especialmente 在 Linux 操作系统中。该错误的出现是...

    java.net.SocketTimeoutException: Receive timed out

    标题中的“java.net.SocketTimeoutException: Receive timed out”是一个Java编程中常见的异常,通常发生在进行网络通信时,接收数据超时。这个异常是由于Socket在等待接收数据时超过了预设的超时时间,没有接收到...

    在Win7系统下抛出java.net.SocketException的解决办法

    ### 在Win7系统下抛出java.net.SocketException的解决办法 #### 问题背景及原因分析 在使用MyEclipse开发工具结合JBoss服务器进行项目开发的过程中,遇到一个常见但令人头疼的问题:当启动JBoss服务器时,控制台...

    Caused by: java.net.UnknownHostException: openapi.alipay.com

    Caused by: java.net.UnknownHostException: openapi.alipay.com

    linux系统下部署TOMCAT错误java.net.UnknownHostException bogon bogon

    linux系统下部署TOMCAT异常错误java.net.UnknownHostException :bogon: bogon 主要原因是主机映射原因 修改hosts文件即可

    jsf-ri.jar from https://javaserverfaces.dev.java.net/

    https://javaserverfaces.dev.java.net/ mojarra-1.2._11_b0_FCS JDK 1.5 绝对能用 good luck

    java.net包socket通信

    Java.NET包中的Socket通信是Java编程语言中用于网络通信的核心组件。它提供了基于TCP/IP协议的客户端和服务端之间数据传输的基础框架。在这个过程中,Socket扮演了连接两端的桥梁角色,使得应用程序可以进行双向、...

    J2EE项目代码全Java .NET

    标题中的“J2EE项目代码全Java .NET”暗示了这是一个包含了使用Java和.NET技术开发的J2EE项目的集合。J2EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用程序的平台,它支持...

    java .net AES加密不兼容问题:

    Java和.NET作为两种主流的开发平台,各自都有内置的加密库来处理数据的安全传输和存储。然而,由于实现细节的不同,直接使用Java和.NET的默认加密方法进行AES(高级加密标准)加密可能会导致在两个平台之间无法互...

    java.net.RTP-javaRTP

    java.net.RTP库 需要将该库加入rt.jar中 此rtp库是基于udp组播技术的 不支持单播 考虑清楚再下载 内部没有演示demo 附有源码 更多RTP信息看博客 https://blog.csdn.net/qq_41054313/article/details/88716995

    java.net.SocketException: No route to host 异常原因

    NULL 博文链接:https://zhoudan241.iteye.com/blog/1432014

    Selenium for java .net (2.48.0)

    "Selenium for java .net (2.48.0)"是这个框架的一个特定版本,适用于Java和.NET平台,并且支持服务(service)相关的功能。 首先,让我们深入了解Selenium的核心组件和功能: 1. **WebDriver**: WebDriver是...

    java .net 正则表达式调试器

    《深入理解Java与.NET平台下的正则表达式调试器》 正则表达式,作为一种强大的文本处理工具,广泛应用于各种编程语言中,包括Java和.NET Framework。然而,编写复杂的正则表达式时,往往需要反复调试才能确保其正确...

    APPlet.java.net

    这软件很好来下吧,。。。。。。。。。。。。。。。

    国际象棋 java .net

    标题中的“国际象棋 java .net”表明这是一个关于使用Java和.NET技术开发国际象棋游戏的项目。在Java和.NET平台上构建这样的应用涉及到多方面的知识,包括但不限于编程语言基础、图形用户界面设计、算法和数据结构、...

    java和.net的socket通信

    在Java中,Socket类位于`java.net`包下,而在.NET中,Socket类位于`System.Net.Sockets`命名空间内。 2. **TCP连接**:Java和.NET的Socket通信通常基于TCP(传输控制协议),这是一种面向连接的、可靠的传输协议,...

    java.net.SocketException: Connection reset 解决方法

    Java中的`java.net.SocketException: Connection reset`是一个常见的网络编程错误,通常表示在TCP/IP通信过程中,连接突然中断。这个异常可能在客户端或服务器端发生,通常与数据传输的异常中断有关。 首先,我们来...

    面试题加答案java .net

    【标题】:“面试题加答案java .net”涵盖了Java和.NET两大编程领域的面试知识点,是为求职者准备的重要参考资料。这两个技术栈在IT行业中占据着重要地位,广泛应用于企业级应用开发。 【Java面试知识点】: 1. **...

Global site tag (gtag.js) - Google Analytics