黑马程序员_Java中的网络编程

------- android培训java培训、期待与您交流! ----------

Java网络编程

       Java中基于套接字的通信,它使程序能将网络操作看成文件I/O——程序能够读取套接字,也能够写入套接字,就如同读写文件那样简单。套接字就是一种软件架构,表示连接的一端。套接字包括流套接字和数据包套接字。

       利用流套接字,一个进程就能够与另一个进程建立连接。当建立好了连接时,进程间的数据流动就是连续的流。流套接字被认为是提供面向连接的服务,用来进行传输的协议是流行的TCP协议。

        利用数据报套接字,传输的是单个信息包(最大64k)。对多数程序员而言,不适合使用数据报套接字,因为它使用的协议是UDP是面向无连接服务,所以无法保证包会以任何特定的顺序到达。使用UDP,甚至可能丢失包或重复接收到包。如果选择UDP的话,要通过大量的额外编程来解决这些问题。对于不要求进行错误检查和依赖于TCP的网络程序而言,UDP是合适的。

        与面向连接的服务相比,无连接服务通常能提供更好的性能,但可靠性不佳。

        TCP就好像现实中的电话通信,UDP就好像现实中的邮局通信。


用流套接字建立简单的服务器:

<1>1步是创建一个ServerSocket对象。

ServerSocket server = new ServerSocket( portNumber );

会注册一个可用的TCP端口号,端口号由客户端使用,用于定位服务器计算机上的服务器程序。它经常被称为"握手点"

<2>2步是服务器通过连接过来的Socket对象管理每个客户端的连接。

Socket connection = server.accept();

当建立了与客户端的连接时,它会返回一个Socket。这个Socket使得服务器能够与客户端进行交互。

<3>3步是获得SocketInputStreamOutputStream对象,通过发送和接收字节使服务器能够与客户端通信。

<4>4步是当传输完成时,服务器对Socket调用close方法,关闭连接。

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class TcpServer2
{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss = new ServerSocket(10004);
		
		Socket s = ss.accept();
		
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip + "...connected");
		
		InputStream in = s.getInputStream();
		
		byte[] buffer = new byte[1024];
		int length = in.read(buffer);
		
		System.out.println(new String(buffer, 0, length));
		
		OutputStream out = s.getOutputStream();
//		Thread.sleep(5000);
		out.write("客户端你好,服务端收到".getBytes());
		
		s.close();
		ss.close();
		
	}
}




用流套接字建立简单的客户端:

<1>1步是创建一个连接到服务器的Socket

Socket connection = new Socket( serverAddress, port );

<2>2步是通过Socket获得InputStreamOutputStream对象,服务器和客户端通过它们进行通信。

<3>3步当传输完成时,客户端对Socket对用close方法,关闭连接。客户端必须判断服务器何时完成了信息发送,以便能调用close方法来关闭Socket连接。例如:当InputStream的方法read检测到流结束符(也称为EOF,即文件结束符)时,会返回-1

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;


public class TcpClient2
{
	public static void main(String[] args) throws Exception
	{
		Socket s = new Socket("localhost", 10004);
		
		OutputStream out = s.getOutputStream();
		
		out.write("服务端,你好".getBytes());
		
		InputStream in = s.getInputStream();
		
		byte[] buffer = new byte[1024];
		int length = in.read(buffer);
		
		System.out.println(new String(buffer, 0, length));
		
		s.close();
	}
}

数据报套接字例程:

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


public class UdpSend
{
	public static void main(String[] args) throws Exception
	{
		DatagramSocket ds = new DatagramSocket(9999);
		
		byte[] data = "服务器你好".getBytes();
		
		DatagramPacket dp = 
				new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 10000);
		
		ds.send(dp);
		
		ds.close();
	}
}


import java.net.DatagramPacket;
import java.net.DatagramSocket;


public class UdpReceive
{
	public static void main(String[] args) throws Exception
	{
		DatagramSocket ds = new DatagramSocket(10000);
		while(true)
		{
			byte[] buf = new byte[1024];
		
			DatagramPacket dp = new DatagramPacket(buf, buf.length);
		
			ds.receive(dp);
		
			String ip = dp.getAddress().getHostAddress();
		
			String data = new String(dp.getData(), 0, dp.getLength());
		
			int port = dp.getPort();
		
			System.out.println("ip: " + ip);
			System.out.println("data: " + data);
			System.out.println("port: " + port);
		}
		//ds.close();
	}
}


------- android培训java培训、期待与您交流! ----------

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值