------- android培训、java培训、期待与您交流! ----------
IP地址:InetAddress 此类表示互联网协议(IP)地址
InetAddress: 此类表示互联网协议 (IP) 地址。
IP 地址是 IP 使用的 32 位或 128 位无符号数字
方法:
public static InetAddress getLocalHost()
throws UnknownHostException返回本地主机。
public String getHostName()获取此 IP 地址的主机名。
public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。
public static InetAddress getByName(String host)
throws UnknownHostException在给定主机名的情况下确定主机的 IP 地址。
网络编程: Socket编程
网络编程的三要术:
1,IP地址
2,端口号
3,传输协议
传输协议:
udp:
面向无连接。
不可靠。
速度快。
将数据封包传输,数据包最大64k。
举例:
聊天留言,在线视频,视频会议,发短信,邮局包裹。
tcp:
面向连接。
安全可靠
效率稍低。
通过三次握手确保连接的建立。
举例:
下载,打电话,QQ聊天(你在线吗,在线,就回应下,就开始聊天了)
UDP协议如何编写程序完成数据的传输:
发送端:
1, 创建DatagramSocket数据包Socket对象(港口)
2, 准备要发送的数据
3, 创建DatagramPacket 数据包,把数据放入数据包中 (仓库)
4, 发送数据 Send( DatagramPacket dp)
5, 关闭Socket流
接收端:
1, 创建DatagramSocket数据包Socket对象(港口)
2, 创建DatagramPacket 数据包(空的仓库)
3, 接收数据,存储到数据包(仓库)中 receive( DatagramPacket dp)
4, 获取数据包(仓库)中的内容
5, 关闭Socket流
TCP协议如何编写程序完成数据的传输:
客户端:
1, 创建客户端Socket对象,连接服务器
2, 获取客户端Socket对象中输出流
3, 通过输出流,写数据到服务器
4, 告知服务器端,客户端数据发送完毕, s.shutdownOutput()
5, 获取客户端Socket对象中的输入流
6, 通过输入流,接收反馈信息
7, 关闭Socket
服务器端:
1, 创建服务器端ServerSocket对象
2, 等待客户端的连接,返回客户端Socket对象
3, 获取客户端Socket对象中输入流
4, 通过输入流获取,客户端发来的数据
5, 获取客户端Socket对象的输出流
6, 给客户端编写反馈信息
7, 关闭Socket
代码
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 4, 客户端写入数据到 服务器端Server.txt文件中,
写入完毕后,服务器端返回消息给客户端,"写入数据成功"
*/
public class Server {
public static void main(String[] args) throws IOException {
//创建ServerSocket对象
ServerSocket ss = new ServerSocket(12345);
//等待客户端Socket对象
Socket s = ss.accept();
//显示出已连接客户端的IP地址
String ip = s.getInetAddress().getHostAddress();
System.out.println("IP = " + ip);
//--------------------------------
//接收客户端发来的数据,把数据写入到Server.txt文件中
//数据源
//s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//目的地
PrintWriter pw = new PrintWriter(new FileWriter("Server.txt", true),true);//刷新与追加功能
//读
String line = null;
while ((line = br.readLine()) != null){
//写,数据写入到Server.txt文件中
pw.println(line);
}
//关闭操作文件的流
pw.close();
//---------------------------
//反馈信息给客户端
PrintWriter pwClient = new PrintWriter(s.getOutputStream(), true);
pwClient.println("注册成功!");
//关闭Socket
s.close();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* 4, 客户端写入数据到 服务器端Server.txt文件中,
写入完毕后,服务器端返回消息给客户端,"写入数据成功"
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//创建客户端Socket对象,连接服务器
Socket s = new Socket("192.168.35.85", 12345);
//发送数据给服务器端
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
pw.println("admin=123456");
//告知服务器端,发送数据完毕
s.shutdownOutput();
//-------------------------------
//获取反馈信息
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = br.readLine();
System.out.println("客户端: " + data);
//关闭Socket流
s.close();
}
}
总结
在使用过程中我们大多数时候都是使用的TCP连接,通过三次握手确保连接的建立。因为它安全可靠,例如下载东西,打电话等需要
UDP虽然快捷,但是不可靠,不安全,例如在线视频,发短信等
在程序设计过程中要理清楚客户端与服务器之间的连接关系