标签:光纤 class tst 服务器端 packet etl 实现 网络通信 解释
网络编程是指将地理位置不同的具有独立功能的多态计算机及其外部设备,通过通信线路连接起来,在网络操作系,网络管理软件及网络通信协议的管理和协调下管理和协调下.实现资源共享和信息传递的计算机系统.
就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换.
计算机网络之间以何种规则进行通信,就是网络模型研究问题。
网络模型一般是指
OSI(Open System Interconnection开放系统互连)七层参考模型
TCP/IP四层参考模型
主机至网络层(物理层 , 数据链路层) , 网际层 , 传输层 , 应用层(应用层 , 表示层 , 会话层)
网络模型7层概述:
UDP
将数据源和目的封装成数据包中,不需要建立连接;
每个数据报的大小在限制在64k;
因无连接,是不可靠协议;
不需要建立连接,速度快
TCP
建立连接,形成传输数据的通道;
在连接中进行大数据量传输;
需要连接所以是可靠协议;
必须建立连接,效率会稍低
获取主机名的 DOS 命令 :hostname
Socket=IP+端口号
步骤:// public DatagramSocket(int port)
e: 释放资源
public class UDPClient {
public static void main(String[] args) throws IOException {
//UDP 客户端
//1.创建客户端Socket
// DatagramSocket( int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。
DatagramSocket socket = new DatagramSocket();
//DatagramPacket( byte[] buf, int length, InetAddress address,int port)
//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
//2.发送数据 DatagramPacket 数据报包
byte[] bytes = "你好UDP".getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.8.123"), 9898);
socket.send(packet);
//3.释放资源
socket.close();
}
}
public class UDPServer {
public static void main(String[] args) throws IOException {
//创建服务端的套接字
//DatagramSocket( int port)
//创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket socket = new DatagramSocket(9898);
//接收数据
//DatagramPacket( byte[] buf, int length)
//构造 DatagramPacket,用来接收长度为 length 的数据包。
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
System.out.println("服务器已经开启等待接收收据...");
socket.receive(datagramPacket); //阻塞在这里,等待接收数据
System.out.println("下来了");
//取出数据报包中的数据
byte[] data = datagramPacket.getData();
//把数据转成字符串
System.out.println(new String(data, 0, datagramPacket.getLength()));
//释放资源
socket.close();
}
public class TCPClient {
public static void main(String[] args) throws IOException{
Socket socket = new Socket("192.168.8.123", 9999);
//获取通道中的输出流
OutputStream out = socket.getOutputStream();
//包装通道中的输出流
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
//创建一个输入流,来关联这个文本文件
BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
String line = null;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
writer.flush();
}
//客户端,已经传完了
socket.shutdownOutput();//关闭输出通道,服务端那边就不会阻塞了
//我要读取服务端的反馈
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes, 0, len));
reader.close();
socket.close();
}
}
public class TCPServer {
public static void main(String[] args) throws IOException {
//服务端上传文件完成了之后,给客户端一个反馈
ServerSocket ss = new ServerSocket(9999);
System.out.println("服务器已经开启....");
Socket socket = ss.accept();
InputStream in = socket.getInputStream();
//把通道中的输入流包装成字符流
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
//关联一个输出流
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("msg1.txt"));
String line=null;
while ((line=reader.readLine())!=null){
bufferedWriter.write(line);
bufferedWriter.newLine();
bufferedWriter.flush();
}
System.out.println("=====================");
//保存完毕后,给客户端一个反馈
OutputStream outputStream = socket.getOutputStream();
outputStream.write("文件上传成功".getBytes());
//释放资源
bufferedWriter.close();
ss.close();
}
}
标签:光纤 class tst 服务器端 packet etl 实现 网络通信 解释
原文地址:https://blog.51cto.com/13852519/2402450