网络协议
网络协议三要素:
语义,语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
语法,语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
时序,时序是对事件发生顺序的详细说明。(也可称为“同步”)。
常用网络协议:
TCP/IP协议毫无疑问是这三大协议中最重要的一个,作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。不过TCP/IP协议也是这三大协议中配置起来最麻烦的一个,单机上网还好,而通过局域网访问互联网的话,就要详细设置IP地址,网关,子网掩码,DNS服务器等参数。
NetBEUI即NetBios Enhanced User Interface ,或NetBios增强用户接口。它是NetBIOS协议的增强版本,曾被许多操作系统采用,例如Windows for Workgroup、Win 9x系列、Windows NT等。NETBEUI协议在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议。NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。所以建议除了TCP/IP协议之外,小型局域网的计算机也可以安上NetBEUI协议。另外还有一点要注意,如果一台只装了TCP/IP协议的WINDOWS98机器要想加入到WINNT域,也必须安装NetBEUI协议。
IPX/SPX协议本来就是Novell开发的专用于NetWare网络中的协议,但是也非常常用–大部分可以联机的游戏都支持IPX/SPX协议,比如星际争霸、反恐精英等等。虽然这些游戏通过TCP/IP协议也能联机,但显然还是通过IPX/SPX协议更省事,因为根本不需要任何设置。除此之外,IPX/SPX协议在非局域网络中的用途似乎并不是很大.如果确定不在局域网中联机玩游戏,那么这个协议可有可无。
InetAddress 封装 ip
InetSocketAddress 封装 ip 端口号
InetAddress inet = InetAddress.getByName("127.0.0.1");
InetAddress inet2 = InetAddress.getByName("localhost");
InetAddress inet3 = InetAddress.getByName("192.168.5.101");
InetAddress inet4 = InetAddress.getByName("ZENWG");
TCP
服务端
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
客户端
Socket socket = new Socket(“127.0.0.1”, 8888);
static void openServer(){
try (ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
InputStream in = socket.getInputStream();
DataInputStream dIn = new DataInputStream(in);
OutputStream out = socket.getOutputStream();
DataOutputStream dOut = new DataOutputStream(out);
) {
String res = dIn.readUTF();
System.out.println(res);
dOut.writeUTF("我知道你是no1了");
} catch (IOException e) {
e.printStackTrace();
}
}
static void sendClient(){
try (Socket socket = new Socket("127.0.0.1", 8888);
OutputStream out = socket.getOutputStream();
DataOutputStream dOut = new DataOutputStream(out);
InputStream in = socket.getInputStream();
DataInputStream dIn = new DataInputStream(in);) {
dOut.writeUTF("我是 no1");
String res = dIn.readUTF();
System.out.println(res);
dIn.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
UDP
DatagramSocket 接受发送
DatagramSocket ds = new DatagramSocket(8888);
DatagramSocket ds = new DatagramSocket(9999);
DatagramPacket dsp = new DatagramPacket(bys, bys.length, host, 8888);
public static void main(String[] args) {
udp();
}
static void udp(){
try (
DatagramSocket ds = new DatagramSocket(8888);
) {
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
ds.receive(dp);
byte[] bs = dp.getData();
System.out.println(new String(bs, 0, dp.getLength()));
String sendStr = "我是udp1";
byte[] bys2 = sendStr.getBytes();
DatagramPacket dp2 = new DatagramPacket(bys2, bys2.length, InetAddress.getByName("127.0.0.1"), 9999);
ds.send(dp2);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
udp();
}
static void udp(){
try (
DatagramSocket ds = new DatagramSocket(9999);
) {
InetAddress host = InetAddress.getByName("127.0.0.1");
String sendStr = "你好吖,我是udp2";
byte[] bys = sendStr.getBytes();
DatagramPacket dsp = new DatagramPacket(bys, bys.length, host, 8888);
ds.send(dsp);
ds.receive(dsp);
byte[] bys2 = dsp.getData();
System.out.println(new String(bys2, 0, dsp.getLength()));
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
参考: TCP和UDP的区别