1.1 端口号。
用于表示进程的逻辑地址,不同进程的表示
2.InetAddress 类
IP地址是TCO/IP网络中的每台计算机都有的唯一地址,在java中,InetAddress类用来描述Internet地址的类。
2.1 例一:利用java InetAddress 获取本机的IP地址
import java.io.*;
import java.net.*;
public class GetIp
{
public static void main(String[] args)throws UnknownHostException
{
InetAddressmyIp=InetAddress.getLocalHost();
System.out.println(myIp);
System.out.println(mIp.getHostAddress());//本地IP
System.out.println(mIp.getHostName());//本机计算机名称
}
}
2.2 例二.根据域名获得IP
import java.io.*;
import java.net.*;
public class GetIp
{
public static void main(String[] args)throws UnknownHostException
{
InetAddressBDIp=InetAddress.getByName("www.baidu.com.cn");
System.out.println(BDIp);
}
}
2.3 需求:通过UDP传输方式,将一段文字数据发送出去
--------思路:1. 建立udpSocket服务
2.提供数据,并将数据封装到数据包中。
3. 通过Socket服务的发送功能,将数据发送出去
4. 关闭资源。
-------------------------------- 主要代码部分 -------------------------------------
服务端:
//1. 创建UDP服务,,通过datagramSocket
datagramSocket ds=new datagramSocket();//括号内可以自定义一个端口,或者系统随机分配端口
//2. 确定数据,并封装成数据包,用datagramPacket
byte[] buf ="udp Go".getBytes();
datagramPacketdp=new datagramPacket(buf,buf.length,InetAddress.getByName(192.168.1.100),10010);
//这里会报异常,所以得cahch或者抛异常
//3. 通过Socket服务,将已有的数据包发送出去
ds.send(dp);
//4. 关闭资源
ds.close();
-------------------------------- 主要代码部分 ---------------------------------------
接收端:DatagramSocket
思路:
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。
//1,创建udp socket,建立端点。
DatagramSocket ds = new DatagramSocket(10010);//接收端的端口与服务端端口必须保持一致。
//2,定义数据包。用于存储数据。
byte[] buf = new byte[1024*64];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
//3. 通过服务的receive方法将收到数据存入数据包中。'
ds.receive(dp);//阻塞式方法、
//4. 通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();//获取发送端IP
String data = new String(dp.getData(),0,dp.getLength());//获取数据的长度、此处为全部长度
int port = dp.getPort();//获取端接口,此处端口可以自定义也可以由系统分配
//服务端应该保持开启状态,方便为多位客户服务
因为收和发动作是不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中。
3. 套接口类(Socket、 ServerSocket)描述。
3.1 套接口类的网络传输层提供的借口。套接口是进程之间的抽象接点。它封装了端口、主机地址、传输层通信协议三方面的内涵、如果所示,两个进程采用套接口方式进行通讯时,两个进程扮演不同的
角色,使用的套接口也不同。
主动请求服务的一方叫客户,它使用各户建立套接口Socket;服务器等待接受客户服务请求,提供服务 ,返回结果,它使用服务器接口ServerSocket。
3.2 目前各户可以只用两种接口:流套接口和数据报套接口
TCP是一种流套接口协议。
UDP是数据报套接口,支持双向的数据流,但不保证是可靠的,有序无重复的,数据报套接口的一个重要特点就是它保留了记录边界
4. 套接口类(Socket)
4.1 构造一个套接口,利用TCP协议将其连接至特定的主机host的特定的窗口port上。
参数host指主机名,port指端口名,构造的套接口(TCP协议)是流套接口还是数据报套接口(datagram或UDP协议),则是由最后一个参数决定的stream决定的。通信有对方的host和 端口port来确定的。
4.2 客户端
a) 创建Socket服务,并指定要连接的主机和端口。
l Socket s = new Socket(“192.168.1.110”,10002);
b) 获取Socket 流中输出流
l OutputInstream out =s.getOutputStream();
2. 服务端:
a) 建立ServerSocket服务,并监听一个端口
l ServerSocket ss = new ServerSocket(10002);
b) 获取连接过的客户端对象,通过ServerSocket的accept的方法,等待连接,所以为阻塞式的
l Socket s = ss.accept();
l
c) 客户端如果发过来数据,使用客户端对象的读取流读取数据
l InputStream in =s.getInputStream();
l byte[] buf = new byte[1024];
l int len = in.read(buf);
l Syso(new String(buf,0,len);
d) 关闭客户端(可选)