网络编程
1慨述
计算机
是指将地理位置不同的具有独立功能的多台计算机极其外部设备,通过通信线连接起来的,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
网络编程
就是用来实现网络互连的不同计算机上运行的程序可以进行数据互换。
2三要素
每个设备在网络中的唯一标识
每台网络zhong端在网络中都有独立的地址。我们在网络中传输数据就是使用这个地址
ipconfig:查看192。168。40。62
本地回路地址:127.0.0.1.225.225.225.225是广播地址
IPv4:4个字节组成。4个0-225。大概42亿,30亿在北美,亚洲40亿。2011年初已经用尽。
IPv6:8组。每组4个16进制数,
3三要素端口号
每个程序在网络中的唯一标识
每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到那台机器上,还要明确发到那个程序
端口号范围从0-65535
编写网络应用都需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
4三要素协议
为计算机网络中进行数据交换而建立的规则,标准或约定的集合
UDP
面向无连接,数据不安全,速度快,不区分客服端和服务端
TCP
面向连接,数据安全,速度略低,分客服端和服务端
三次握手:客服端先向服务端发起响应请求,传输数据
5Socked
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字
通信两端都有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO流传输
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port
6UDp
发送
public class Demo_Send {
public staic void main(String[] args) throws Exception {
String str = "wht are you弄啥了?";
DatagramSocket soket = new DatagramSocket();
DatagramPacket packet =
new DatagramPacket(str.getBytes(), str,getBytes().length, InetAddress.getByName("127.0.0.1"),666);
socket.receive(pakcet);
socket.close();
}
}
接收
package com.heima.socket;
import java.net.DatagramSocket;
public class Demo_Send {
public staic void main(String[] args){
DatagramSocket soket = new DatagramSocket(666);
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
socket.receive(pakcet);
byte[] arr = packet.getData();
int len = packt.getLength();
System.out.println(new String(arr,0,len));
socket.close();
}
}
7优化
发送
public class Demo_Send {
public staic void main(String[] args) throws Exception {
String str = "wht are you弄啥了?";
DatagramSocket soket = new DatagramSocket();
whiile(true) {
String line = sc.
DatagramPacket packet = sc.nextLine();
if("quit".equals(line)) {
break;
}
new DatagramPacket(line.getBytes(), line,getBytes().length, InetAddress.getByName("127.0.0.1"),666);
socket.receive(pakcet);
}
socket.close();
}
}
接收
package com.heima.socket;
import java.net.DatagramSocket;
public class Demo_Send {
public staic void main(String[] args){
DatagramSocket soket = new DatagramSocket(666);
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
while(true) {
socket.receive(pakcet);
byte[] arr = packet.getData();
int len = packt.getLength();
String ip = packet.getLength();
int port = packet.getPort();
System.out.println(ip + ":" + port + ":" + new String(arr,0,len));
}
}
}
socket.close();
}
}
8聊天界面化
package com.heima.socket;
import java.awt.Frame;
public class Demo_GUIChat extends Frame {
pubic Demo4-GUIChat() {
init();
southPanel();
centerPanel();
event();
}
public viod event() {
this.addWindowListener(new WindAdapter() {
@override
public viod windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
pubic viod centerPanel() {
Panel center = new Panel();
TextArea vieWText = new TextArea();
TextArea sendText = new TextArea(5,1);
center.setLayout(new BorderLayout());
center.add(sendText,BorderLayout.SOUTH);
center.add(sendText,BorderLayout.CENTER);
viewText.setEditsble(false);
sendText.setFont(new Font("xxx", Font.PLAIN, 15));
viewText.setFont(new Font("xxx", Font.PLAIN, 15));
this.add(center,BorderLayout.CENTER);
}
pubic viod southPanel() {
panel south = new Panel();
TextField tf = new TextField(15);
Button send = new Button("发送");
Button log - new Button("记录");
Button cear = new Button("清屏");
Button shake = new Button("震动");
south.add(tf);
south.add(send);
south.add(log);
south.add(cear);
south.add(shake);
this.add(south,BorderLayout.SOUTH);
}
pubic void init() {
this.setLocation(500, 50);
this.setSize(400, 600);
this.setVisible(true);
}
9TCP协议
package com.heima.socket;
public class Demo_Server {
pubic static viod main(String[] args) throws IOException {
ServerSocket sercer = new ServerSocket(12345);
Socket socket = sever.accept();
Inputstream is = socket.getInputStream();
Outputstream os = socket.getOutputStream();
os.write("百度一下你就知道".getBytes()):
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr,0,len));
}
}
public class Demo_Client {
pubic static viod main(String[] args) throws UnknHostExcetion, IOException {
Socket socket = new Socket("127.0.0.1", 12345);
Inputstream is = socket.getInputStream();
Outputstream os = socket.getOutputStream();
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr,0,len));
os.write("优秀".getBytes());
socket.close();
}
}