-------------
网络通讯解析:
1,找到对方IP
2, 数据要发送到对方指定的应用程序上。为了标识这些应用程序,用数字来标注,这些标识数字叫端口。逻辑端口
3,定义通信规则。这个通信规则称为协议。国际组织定义了通信协议 TCP/IP.
--------------------------------------------------------------------------------------------------
1,网络中设备的标识
2,不易记忆,可用主机名
3,本地回环地址:127.0.0.1 主机名:localhost
二:端口号
1,用于标识进程的逻辑地址,不同进程的标识
2,有效端口:0-65535,其中0-1024系统使用或保留端口。
三:传输协议
1,通讯的规则
2,常见协议:TCP,UDP
Socket:
Socket就是为网络服务提供的一种机制;
通信的两端都有Socket;
网络通信其实就是Socket间的通信;
数据在两个Socket间通过IO传输。
--------------------------------------------------------------------------------------------------
基础代码:
InetAddress ia = InetAddress.getByName("www.sina.com");//将某个地址封装成对象
ia.getHostAddress();//得到对应的地址,重点掌握
ia.getHostName();//获取对应的主机名
UDP传输
void udpsend()throws Exception
{
//1,创建udp服务,通过DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//2,确定数据,并封装成数据包。
byte[] buf = "udp lai le".getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10000);
//3,通过Socket服务,将已有的数据包发送出去,用send方法
ds.send(dp);
//4,关闭资源。
ds.close();
}
public void udpRece()throws Exception
{
//1,创建udp socket,建立端点,指定端口号为10000
DatagramSocket ds = new DatagramSocket(10000);
//2,定义数据包,用于存储数据
byte [] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//3,通过服务的receive方法将收到的数据存入数据包中
ds.receive(dp);
//4,通过数据包的方法获取其中的数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());//dp.getlength()是获取数据有效长度
int port = dp.getPort();
//5,关闭资源
ds.close();
}
TCP传输:
public void tcpClient()throws Exception
{
//1,创建客户端的Socket服务。指定目的主机和端口
Socket s = new Socket("192.168.1.254",10004);
//2,为了发送数据,应该获取Socket流中的输出流
OutputStream out = s.getOutputStream();
out.write("client lai le".getBytes());//写入数据
//3,关闭端口
s.close();
}
public void tcpServer()throws Exception
{
//建立服务端socket服务,并监听一个端口。
ServerSocket ss = new ServerSocket(10004);
//通过accept方法获取连接过来的客户端对象
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();//获取客户端主机地址
//获取客户端发过来的数据,那么要使用客户端的读取流来读取数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String str = new String(buf,0,len);//获取数据
//关闭客户端资源
s.close();
ss.close();//关闭服务器端(可选操作)
}