Socket网络编程

网络地址分类(32位网络地址)

A类地址:第一个字节为网络地址,其他3个字节主机地址,第一字节的最高位固定为0

从1.0.0.1------126.255.255.255

B类地址:第一字节和第二字节为网络地址,其他2个字节为主机地址,第一字节前两位固定为10

从128.0.0.1---191.255.255.255

C类地址:前三个字节为网络地址,最后一个字节是主机地址,第一字节的前三位固定为110

从192.0.0.1----223.255.255.255

D类地址:组播地址

不分网络地址和主机地址,第一字节的前四位固定为1110

224.0.0.1-----239.255.255.255

注意几点:

 

1、192.168.1.255为广播地址,任何主机都是不能使用的。

2、每一个网络地址都能组成一个小型的局域网。

3、127.0.0.1测试tcp,udp网络时使用的内部回环网络

 

在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

(1) DatagramSocket

    DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。

    该类既可以用于实现客户端连接,也可以用于实现服务器端连接。

(2) DatagramPacket

DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,

都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。

DatagramPacket类的作用类似于现实中的信件。

 

UDP客户端有三个步骤:建立连接、发送数据\接收数据和关闭连接。

 

基于UDP协议的Socket编程步骤

利用DatagramPacket对象封装数据包

利用DatagramSocket发送数据包

利用DatagramScoket接受数据包

利用DatagramPacket处理数据包

 

TCP客户端

 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.net.ServerSocket;
 8 import java.net.Socket;
 9 
10 public class TCP_Clicent {
11 public static void main(String[] args) throws Exception {
12     //1.创建对象
13             ServerSocket sk=new ServerSocket(1122111);
14             //2.监听
15             Socket s=sk.accept();
16             //打包数据
17             BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));    
18             BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
19             OutputStream os=s.getOutputStream();
20             String line=null;
21             while((line=br.readLine())!=null){
22                 System.out.println("Client \t"+line);                        
23                 os.write(bw.readLine().getBytes());
24             }            
25             //释放资源
26             s.close();
27             //sk.close();
28 }
29 }

TCP服务端

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCP_Service {
public static void main(String[] args) throws Exception {
    Socket sk=new Socket("192.168.60.127",1122111);
    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();


}
}

UDP:

客户端:

1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.net.DatagramPacket;
 4 import java.net.DatagramSocket;
 5 import java.net.InetAddress;
 6 import java.net.SocketException;
 7 
 8 public class UDP_Clicent {
 9 public static void main(String[] args) throws Exception  {
10     DatagramSocket l=new DatagramSocket();
11     DatagramSocket ds=new DatagramSocket();
12     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
13     String line=null;
14     byte [] bys=line.getBytes();
15     int num=bys.length;
16     InetAddress address=InetAddress.getByName("192.168.60.127");
17     int port=101236;
18     DatagramPacket dp=new DatagramPacket(bys,num, address,port);
19     ds.send(dp);        
20     ds.close();
21 }
22 }

服务器:

1 import java.net.DatagramPacket;
 2 import java.net.DatagramSocket;
 3 import java.net.InetAddress;
 4 import java.net.SocketException;
 5 
 6 public class UDP_Service {
 7 
 8     public static void main(String[] args) throws Exception {
 9         DatagramSocket ds=new DatagramSocket(101236);
10         byte[] bys = new byte[1024];
11         int len = bys.length;
12         DatagramPacket dp = new DatagramPacket(bys, len);
13         ds.receive(dp);
14         byte[] by = dp.getData();
15         int length = dp.getLength();
16         InetAddress address = dp.getAddress();
17         String ip = address.getHostAddress();
18         String s = new String(by, 0, length);
19         System.out.println(ip + "---" + s);
20     ds.close();
21 
22     }
23 
24 }

 

posted @ 2018-04-01 16:00  清风挽月丶  阅读(98)  评论(0编辑  收藏  举报