`
yaolinnan
  • 浏览: 57080 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

java网络编程

 
阅读更多

1、概述

随着互联网的不断发展,对网络应用程序的需求和要求也越来越高,所以网络编程也是java很重要的一个方面。网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。

java的网络编程提供了两种通信协议 :TCP(传输控制协议)和UDP(数据报协议),其中TCP是可靠的,而UDP是不可靠的,网上的聊天工具一般采用这种协议。

 

2、IP地址

IP地址是表示一台计算机在互联网中唯一的标记,java的InetAddress类就是表示IP地址,其中分为Inet4Address和Inet6Address两个子类,分别表示IPv4和IPv6。常用方法有:getHostName()得到主机的IP地址,isReachable(int timeout)判断地址是否可以到达。

 

3、URL

URL是统一资源定位符,可以通过它找到互联网的任何资源(比如一个网页),而通过UrlConnection类得到远程网络资源的属性。<!-- Generated by javadoc (build 1.6.0-beta2) on Mon Mar 19 18:23:48 CST 2007 -->

<noscript></noscript>

URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。

public class Test {

	public static void main(String[] args) {
		try {
			URL url=new URL("http://www.baidu.com");//指定远程资源的URL
			URLConnection connection=url.openConnection();//获得连接
			InputStream input=url.openStream();//获得远程资源的IO
			StringBuffer buffer=new StringBuffer();
			BufferedReader reader =new BufferedReader(new InputStreamReader(input));
			String str="";
			while((str=reader.readLine())!=null){
				buffer.append(str);//读取远程资源的内容
			}
			System.out.println("连接远程资源的内容:"+buffer.toString());
			System.out.println("连接远程资源的类型:"+connection.getContentType());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

4、TCP实现

在java中使用socket(套接字)来完成TCP程序的开发,通过它可以方便的建立可靠、双向、点对点的通信连接。服务器端使用ServerSocket来等待客户端的连接,每一个客户端都需要一个Socket对象来表示。

建立服务器程序:

public class Server {
	public static void main(String[] args) {
		try {
			ServerSocket ss=new ServerSocket(6666);//设置服务器等待客户端连接的端口
			while(true){
				Socket s=ss.accept();
				System.out.println("连接成功");
				InputStream is=s.getInputStream();
				BufferedReader br=new BufferedReader(new InputStreamReader(is));
				System.out.println("Clint("+s.getInetAddress()+"):"+br.readLine());
				}
				br.close();
				s.close();
				ss.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 编写客户端程序:

public class Clint {
public static void main(String[] args) {
	try {
		Socket s=new Socket("127.0.0.1",6666);//建立对服务器端的连接
		OutputStream os=s.getOutputStream();
		BufferedReader sys=new BufferedReader(new InputStreamReader(System.in));//获得用户的输入信息
		String str=sys.readLine();
		PrintWriter pw=new PrintWriter(os);
		while(!str.equals("bye")){//只要用户不输入“bye”,则将用户输入的信息传输到服务器端
		pw.println(str);
		pw.flush();
		str=sys.readLine();
		}
		pw.close();
		sys.close();
		s.close();
	} catch (UnknownHostException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
}

 

5、UDP实现

在java中通过DatagramSocket和DatagramPacket来完成UDP程序的开发。

编写UDP发生的服务器端程序:

public class UDPServer {
	public static void main(String[] args) {
		byte []b=new byte[1024];
		DatagramPacket dp=new DatagramPacket(b,b.length);//设置发送的数据包长度
		try {
			DatagramSocket ds=new DatagramSocket(5678);//设置服务器端的连接端口
			ds.receive(dp);
			ByteArrayInputStream bais=new ByteArrayInputStream(b);
			DataInputStream dis=new DataInputStream(bais);
			System.out.println(dis.readDouble());
			ds.close();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 UDP客户端设计:

public class UDPClint {
	public static void main(String[] args) {
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		DataOutputStream dos=new DataOutputStream(baos);
		
		try {
			dos.writeDouble(5.6);
			byte []b=baos.toByteArray();
			DatagramPacket dp=new DatagramPacket(b,b.length,new InetSocketAddress("127.0.0.1",5678));
			DatagramSocket ds=new DatagramSocket(9999);
			ds.send(dp);
			ds.close();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics