首页 > 代码库 > 网络编程

网络编程

概述

如果两台计算机要通讯,那么它必须满足以下3点:

1、每台电脑要有唯一标识,即是IP地址。

2、用于通讯的应用程序也要有唯一标识,即是端口。

3、通讯时要遵循一定的规则,成为协议。国际组织定义了通用协议TCP/IP协议。

IPv4地址是四段,为了解决IP地址不够用的问题出现了IPv6是六段,不仅支持数字还支持字母。

端口取值:0~65535      0~1024一般情况下被系统的程序保留

网络参考模型

 

技术分享

 

TCP和UDP

UDP面向无连接,比如邮局寄信时只需要把信要寄往的地址写明确即可,而不需要考虑收信人知道或不知道,是否在。

特点:

1、将数据及源和目的封装成数据包中,不需要建立连接。

2、每个数据包的大小限制在64内。

3、因无连接,是不靠协议,容易丢包。

4、不需要建立连接,传送数据快。

TCP面向相连接  要求对方必须在,比如打电话的流程。这里是利用三次握手的原理

特点:

1、建立连接形成传输数据的通道。

2、在连接中进行大量的数据传输。

3、通过三次握手完成连接,是可靠协议。

4、必须建立连接,传输效率稍低。

 

Socket

它是为网络服务提供的一种机制;通信的两端都有socket;网络通信其实就是socket间的通信;数据通过IO流进行传输。相当于船靠岸的港口。

不同类型的协议传输需要不同类型的Scoket进行传输。

 

UDP传输用到DatagramSocket,以下是一个UDP传输的示例:

package socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*
 * 示例:模仿UDP传输的发送端
 * */
public class UdpSend {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		 //1、创建服务
		DatagramSocket ds=new DatagramSocket();
		//2、创建所需发送的数据包
		byte[] data="http://www.mamicode.com/hello!sokect~".getBytes();
		InetAddress i=InetAddress.getByName("172.26.87.4");
		DatagramPacket dp=new DatagramPacket(data, data.length,i,10001);
		System.out.println(" send data...");
		//3、发送数据包
		ds.send(dp);
		
		//4、关闭流
		ds.close();
	}

}




package socket;

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

//UDP传输的接收端

public class UdpRecive {

	public static void main(String[] args) throws Exception  {
		// TODO Auto-generated method stub
		//创建端口为10001的sokect服务	
		DatagramSocket ds=new DatagramSocket(10001);
		//接受数据包
		byte[] buf=new byte[1024];
		DatagramPacket p=new DatagramPacket(buf, buf.length);
		System.out.println("wait data.....");
		ds.receive(p);
		String ip=p.getAddress().getHostAddress();
		String data=http://www.mamicode.com/p.getData().toString();"ip:"+ip);
		System.out.println("data:"+data);
		System.out.println("port:"+port);
		ds.close();
	}

}

 

网络编程