网络编程
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。
以上百度;
c/s (Client/Server 客户端/服务端)
b/s (Brower/Server 浏览器/服务端)
1网络通信的要素
通信双方的地址:
ip(InetAddress 127.0.0.1)
(ip 代表 计算机的地址)
- IPV4/IPV6
- 公网/私网
- 域名
InetAddress.getLocalHost();
InetAddress.getByName();
端口号
(端口号代表程序)
规则:网络通信协议
- OSI七层网络模型
- TCP/IP四层概念模型
2.网络编程规则
客户端
- 建立网络链接
- 交换数据(可重复多次)
- 关闭网络链接
服务器端
- 监听端口
- 获得链接
- 交换数据
- 关闭链接
3.TCP
相当于打电话,双方必须都相应,才能链接
(三次握手,四次分手)
-
创立发送信号服务器
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;public class Demo01 {
public static void main(String[] args) throws IOException {
InetAddress inetAddress = null;
Socket socket = null;
OutputStream os = null;
try {
//第一:必须有ip地址,端口号
inetAddress = InetAddress.getLocalHost();
int port = 9999;
//第二:有一个Socket接口
socket = new Socket(inetAddress,port);
//通过流来发送信息
os = socket.getOutputStream();
os.write("fuck every thing".getBytes());} catch (Exception e) { e.printStackTrace(); }finally{ //后开先关原则,关闭流,关闭链接 os.close(); socket.close(); } }}
-
创建接受服务器
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Demo02 { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; Socket socket = null; InputStream is= null; ByteArrayOutputStream bos = null; try { //第一:必须有Socket的接收器,并接收发送器的地址 serverSocket = new ServerSocket(9999); //第二:等待发送器的请求 socket = serverSocket.accept(); //第三:用流接收信息 is= socket.getInputStream(); //将信息输出 bos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int len; while((len = is.read(b))!=-1){ bos.write(b,0,len); } System.out.println(bos); } catch (IOException e) { e.printStackTrace(); }finally{ //关闭流 is.close(); socket.close(); serverSocket.close(); } }}
-
UDP
相当于发短信,只需要发送者发出
发送者
package chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class Demo {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9877);
//
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String t = input.readLine();
byte[] buffer = t.getBytes();
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length,new InetSocketAddress("localhost",8897));
socket.send(packet);
}
}
接收者
package chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Demo1 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8897);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet);
byte[] data = packet.getData();
String s = new String(data,0,data.length);
//由于data是byte字节数组,默认值1024位,会出现乱码
System.out.println(s);
}
}
浙公网安备 33010602011771号