---------------------- android培训、java培训、期待与您交流! ----------------------
网络有两种参考模型分别是OSI参考模型和TCP/IP参考模型其中OSI有物理层,数据链路层,网络层,传输层,会话层,表示层,应用层7层,TCP/IP参考模型
有四层,想进行网络通讯必须具备以下要素,第一IP地址,它是网络设备的标识,第二是端口号,它用于标识进程的逻辑地址,其中0-1024为系统使用或者保留端
口,不同的进程有不TCP和UDP。有了以上三个要素以后我们就可以进行网络数据传输等活动了。
两大主要传输协议的区别:
UDP:
1,将数据及数据源和数据目的都封装成包,不需要简历连接,源将数据打包,目的接收数据包,
2,每个数据包的大小限制在64K以内,超过以后自动进行切割,
3,因为没有连接所以是不可靠协议,
4,速度快因为省了资源连接时会有资源消耗
TCP:
1,建立连接形成数据通道,
2,在连接中进行大量数据传输,没有大小限制,
3,通过三次握手完成连接,是可靠协议(三次握手:)
4,因为必须建立连接因而效率降低,
无论用那一种协议,都要先存在两个短点,Socket就是为网路提供服务的两种机制,通信的两端都有,网路通信其实就是Socket的通信,数据在两端通过IO传输。
有了Socket就有了网路通讯,而根据协议的不同会有不同的服务 */
package net;
import java.io.BufferedReader;
import java.io.FilenameFilter;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class NetDemo {
}
class SendDemo {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket();// 建立Socket对象
String msg = "i am learing java";
byte[] b = msg.getBytes();
InetAddress inet = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(b, b.length, inet, 9999);
ds.send(dp);
ds.close();
}
}
class ReceiveDemo {
public static void main(String[] args) throws Exception {
// 建立Socket监听一个端口
DatagramSocket ds = new DatagramSocket(9999);
// 存放数据,一包的形式
byte[] re = new byte[1024];
DatagramPacket dp = DatagramPacket(re, re.length);
String ip = dp.getAddress().getHostName();
int port = dp.getPort();
ds.receive(dp);
ds.close();
}
}
public class ClientDemo {
public static void main(String args[]) throws Exception { // 所有异常抛出
Socket client = null; // 表示客 户端
client = new Socket("localhost", 8888);
BufferedReader buf = null; // 一次性接收完成
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = buf.readLine();
System.out.println("服务器端输出内容:" + str);
buf.close();
client.close();
}
}
// 建立服务端Socket对象必须监听一个接口
public class ServerDemo {
public static void main(String args[]) throws Exception { // 所有异常抛出
ServerSocket server = null; // 定义ServerSocket类
Socket client = null; // 表示客 户端
PrintStream out = null; // 打印流输出最方便
server = new ServerSocket(8888); // 服务器在8888端口上监听
System.out.println("服务器运行,等待客户端连接。");
client = server.accept(); // 得到连接,程序进入到阻塞状态
String str = "hello world"; // 表示要输出的信息
out = new PrintStream(client.getOutputStream());
FilenameFilter fl = null;
out.println(str); // 向客户端输出信息
client.close();
server.close();
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------