socket编程
1.概念:
1.网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑
2.网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,
在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!
中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
2.网络编程三要素:
1:IP地址
2:端口
3:协议
3.IP地址 = 网络地址 +主机地址
网络地址:标识计算机或网络设备所在的网段
主机地址:标识特定主机或网络设备
查看本机的IP地址 ipconfig
测试网络是否通畅 ping + IP地址
4.网络通信协议
为在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
1.TCP协议(Transmission Control Protocol 传输控制协议)
面向连接的、可靠的、基于字节流的传输通信协议
2.UDP协议(User Datagram Protocol 用户数据报协议)
无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接
UDP协议的Socket网络编程步骤:
1.利用 DatagramPacket 对象封装数据报
2.利用 DatagramSocket 发送数据报
3利用 DatagramSocket 接收数据报
4利用 DatagramPacket 处理数据报
基于UDP协议的Socket网络通信
DatagramSocket ds=new DatagramSocket(1086); byte[] bys = new byte[1024]; int len = bys.length; DatagramPacket dp = new DatagramPacket(bys, len); ds.receive(dp); byte[] by = dp.getData(); int length = dp.getLength(); InetAddress address = dp.getAddress(); String ip = address.getHostAddress(); String s = new String(by, 0, length); System.out.println(ip + "---" + s); ds.close();
DatagramSocket ds=new DatagramSocket(); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); byte [] bys="aaa".getBytes(); int num=bys.length; InetAddress address=InetAddress.getByName("192.168.60.7"); int port=1086; DatagramPacket dp=new DatagramPacket(bys,num, address,port); ds.send(dp); ds.close();
基于TCP协议的Socket网络通信
Socket sk=new Socket("192.168.60.7",20004); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())); String line=null; while((line=br.readLine())!=null){ bw.write(line); bw.newLine(); bw.flush(); InputStream is=sk.getInputStream(); byte [] by=new byte[1024]; int num=is.read(by); String h=new String(by, 0, num); System.out.println("Service:\t"+h); } //br.close(); //bw.close(); sk.close();
ServerSocket sk=new ServerSocket(20004); Socket s=sk.accept(); BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedReader bw=new BufferedReader(new InputStreamReader(System.in)); OutputStream os=s.getOutputStream(); String line=null; while((line=br.readLine())!=null){ System.out.println("Client \t"+line); os.write(bw.readLine().getBytes()); }