你的位置:首页 > Java教程

[Java教程]网络编程之简单总结


一、网络编程中的重要的类

1、InetAddress:互联网协议(IP)地址   封装计算机的IP地址和DNS(域名解析),没有端口,构造器私有化。通过相关方法得到。

例如:

public class InetDemo01 {

public static void main(String[] args) {
try {
InetAddress inetAddress=InetAddress.getByName("www.baidu.com");
//返回IP地址 127.0.0.1
System.out.println(inetAddress.getHostAddress());
//返回 localhost
System.out.println(inetAddress.getHostName());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

2.URL类 :统一资源定位符

public class InetDemo02 {

public static void main(String[] args) {
try {
URL url = new URL("http://www.baidu.com:80/index.html#aa?uname=yym");
System.out.println(url.toString());
System.out.println("协议:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("资源:"+url.getFile());
System.out.println("相对路径:"+url.getPath());
System.out.println("锚点:"+url.getRef());
//有锚点时参数为空
System.out.println("参数:"+url.getQuery());

url = new URL("http://www.baidu.com/a/");
url = new URL(url,"b.txt");
System.out.println(url.toString());
} catch (MalformedURLException e) {

e.printStackTrace();
}

}

}

3、TCP协议:像电话 ,必须先建立连接,安全可靠,但是效率低;

     UDP协议:像短信,不用先建立连接 ,不安全,效率高;

UDP:类DatagramSocket   DatagramPacket

步骤:客户端:                                                                                    服务器端:

1)创建客户端DatagramSocket 类 + 端口(客户端端口)                               1)创建服务器端DatagramSocket类+端口(服务器端端口)

2)准备数据  字节数组                                        2)准备接收容器  字节数组

3)打包数据DatagramPacket + 并指定服务器地址及端口                             3)封装DatagramPacket

4)客户端发送打包数据                                                                         4)服务器端接收数据

5)释放资源                                                                                       5)拆包  + 分析数据

                                                                                                       6)释放资源

客户端:

public class MyClient {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(6666); //创建客户端DatagramSocket 类 + 端口(客户端端口) 
String msg = "这是要发的数据";
byte[] data = msg.getBytes();                                                 //把要发的数据封装成字节数组
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888));//将数据打包,并指定服务器地址及端口
datagramSocket.send(packet);                                                //客户端发送打包数据
datagramSocket.close();                                                        //释放资源
}
}

服务器端:

public class MyServler {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(8888);              //创建服务器端DatagramSocket类+端口(服务器端端口)
byte[] container =new byte[1024];                                           //准备接收容器  字节数组 (保证一致性,发送的数据是用DatagramPacket封装的字节数组)
DatagramPacket datagramPacket = new DatagramPacket(container, container.length);  //
datagramSocket.receive(datagramPacket);                             //服务器端接收数据
byte[] data =datagramPacket.getData();                                //拆包
int len = datagramPacket.getLength();                                   //分析数据
System.out.println(new String(data,0,len));
datagramSocket.close();                                                       //释放资源

}

TCP协议: ServerSocket           Socket    客户端和服务器端必须先建立连接 再发送或者接收数据(使用流) 必须先启动服务器端,再启动客户端。

客户端:Socket socket = new Socket("localhost",8888); //创建客户端,并指定服务器端口

服务器端:

ServerSocket server = new ServerSocket(8888);//创建服务器端,并指定端口
Socket socket = server.accept(); //一旦连接此服务器的客户端启动,服务器端就会接收到

接收数据:客户端:Socket中的getInputStream();返回InputStream

              服务器端:ServerSocket server 中getInputStream();返回InputStream

发送数据:客户端:Socket中的getOutputStream();返回OutputStream

              服务器端:ServerSocket server 中getOutputStream();返回OutputStream