java网络编程

                          

java网络编程主要以下的知识:

IP地址和域名

        IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,IP地址的概念类似于电话号码、身份证这样的概念。由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。所以在网络编程中,可以使用IP或域名来标识网络上的一台设备。

网络协议:

TCP/IP 协议:是面向连接的通信协议,通信建立通信管道进行大数据量的可靠传输,效率会较低。
UDP协议:是面向无连接的通信协议,不需要建立连接,数据发送前要封装成数据包,包最大的不超过64K,传输数据不可靠,但是速度快。


Socket

Socket:是为网络服务提供的一种机制,通信的双方都有Socket,通俗的讲,网络通信其实就是Socket通信。
网络传输的具体操作都有Socket完成,所以我们可以把Socket比喻成一个码头,我们只要把货物送到码头,然后剩下的运输工作就全交给码头了。那我们怎么把货物送到码头呢,我们可以用集装箱,所以java还提供了一个集装箱也就是Packet,主要我们把货物装上集装箱,送到码头,然后就不用管了,具体的运输,码头完成,码头通过我们指定的地址把货物送出去,送到另外一个码头,然后由接受方进行具体的操作。

UDP

建立一个udp发送端步骤:

1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。
建立udp的接收端步骤:
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。
 public class UdpRece{
	public static void main(String[] args) {
		//创建udpsocket服务建立端点
		try {
			DatagramSocket ds = new DatagramSocket(10000);
		
			//定义数据包
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf,buf.length);
			//通过服务的receive方法将收到的数据存入数据包中
			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+"--"+data+"--"+port);
			ds.close();
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

public static void main(String[] args) {
		//创建udp服务,通过DatagramSocket对象
		try {
			DatagramSocket ds = new DatagramSocket(8888);
			//确定数据,封装成数据包
			byte[] buff = "udp ge me ilai dal  daak fdk".getBytes();
			DatagramPacket dp = new DatagramPacket(buff,buff.length,InetAddress.getLocalHost(),10000);
			//dp.setPort(1231);
			//通过socket服务的发送功能,将数据包发出去
			ds.send(dp);
			ds.close();
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

TCP

建立有一个TCP通信的步骤:

客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。

服务端:
1,建立服务端的socket服务。ServerSocket();并监听一个端口。
2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。
4,关闭服务端。(可选)
class  TcpServer{
	public static void main(String[] args) throws Exception
    {
		//建立服务端socket服务。并监听一个端口。
		ServerSocket ss = new ServerSocket(10003);


		//通过accept方法获取连接过来的客户端对象。
		while(true)
		{
			Socket s = ss.accept();


			String ip = s.getInetAddress().getHostAddress();
			System.out.println(ip+".....connected");


			//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
			InputStream in = s.getInputStream();

			byte[] buf = new byte[1024];
			int len = in.read(buf);


			System.out.println(new String(buf,0,len));


			s.close();//关闭客户端.
		}
		//ss.close();
    }
}

class TcpClient2 
{
	public static void main(String[] args)throws Exception{
		Socket s = new Socket("192.168.1.254",10004);

		OutputStream out = s.getOutputStream();


		out.write("服务端,你好".getBytes());



		InputStream in = s.getInputStream();


		byte[] buf = new byte[1024];


		int len = in.read(buf);


		System.out.println(new String(buf,0,len));


		s.close();
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值