黑马程序员——网络编程总结

什么是网络编程?
网络编程建立在公共协议TCP/IP或者IOS协议的基础上,通过套接字的服务机制实现不同主机的联系。
 
网络编程的通讯要素
IP地址
网络中设备的识别,本地回环地址为127.0.0.1,主机名:localHost
端口号
用于标识不同进程的逻辑地址
传输协议
常用的协议是:UDP和TCP
 
获取主机网络地址对象
InetAddress  inetaddress1 = InetAddress.getByName("www.baidu.com")或者
InetAddress inetaddress2 = InetAddress.getByName("192.168.1.1")
获取主机名
String hostname = inetaddress1.getHostName();
获取主机地址
String hostaddress = inetaddress1.getHostAddress();
 
套接字Socket
Socket是一种服务接口,它提供的服务能够实现数据包的传递
 
UDP协议特点
面向无连接,不可靠协议
数据报大小限制在64k内
传输速度快,容易丢包
TCP协议特点
面向连接,可靠协议,三次握手,建立连接
在连接中可进行大数据的传输
传输安全,速度慢
 
UDP传输
UDP发送数据报步骤:
1:建立DatagramSocket对象服务
DatagramSocket datagramsocket = new DatagramSocket();
2:建立数据报DatagramPacket对象
byte[] a = "hei ma cheng xu yuan".getBytes();
DatagramPacket  datagrampacket  = new DatagramPacket(a,a.length,InetAddress.getByName("192.168.1.1",10000);
3:发送数据包
datagramsocket.send(datagrampacket);
4:关闭Socket
datagramsocket.close();
UDP接收数据步骤
1:建立DatagramSocket对象服务
DatagramSocket datagramsocket = new DatagramSocket(10000);
2:建立数据报DatagramPacket对象
byte[] a = new byte[1024];
DatagramPacket  datagrampacket  = new DatagramPacket(a,a.length);
3:通过Socket服务的receive()方法把接收到的数据封装到已经准备好的数据包中
datagramsocket.receive();
4.通过接收到的数据包提供的方法,获取数据包中各种数据
返回主机对象
InetAddress inetaddress = a.getAddress();
获取主机名
String hostname = inetaddress1.getHostName();
获取主机地址
String hostaddress = inetaddress1.getHostAddress();
返回数据内容
byte[] data  = a.getData();
String b = new String(data,0,data.length());
返回端口号
int port  = a.getPort();
5,关闭Socket流
datagramsocket.close();
 
Tcp传输
Tcp客户端
1:建立套接字服务
Socket socket = new Socket(InetAddress.getByName("192.168.1.1",10000);
2:获取流
OutputStream output = socket.getOutputStream();
3:通过输入流写入数据
byte[] data  = "ke hu duan qing qiu lian jie".getBytes();
int len = output.write(data);
4:关闭流
socket.close();
Tcp服务端
1:建立套接字服务,并监听端口
ServerSocket serversocket = new ServerSocket(10000);
2:获取连接过来的客户端对象
Socket socket = serversockt.accept();
3:获取客户端连接过来的流,并读取相关数据
InputStream  input  = socket .getInputStream();
byte[] data = new byte[1024];
int len = data.read(data);
4.关闭流
serversocket.close();
 
URL
什么是URL
其实就是表示网页地址的字符串
 
建立URL对象
URL url1 = new URL("https://www.baidu.com/");
URL url2 = new URL("https://192.168.1.254:8080/myweb/demo.html");
 
获取URL对象方法
url2.getFile();获取文件名
url2.getHost();获取主机名
url2.getPort();获取端口号
url2.getPath();获取路径
url2.getProtocol();获取协议
url2.getQuery();获取查询部
 
连接到服务端
URLconnection urlconnection = url2.openConnection();
 1 练习
 2 /*
 3  * 编写一个聊天程序,有收数据的部分,有发数据的部分
 4  */
 5 package bolgtest;
 6 import java.io.*;
 7 import java.net.*;
 8 public class UdpTest {
 9  public static void main(String[] args)throws Exception {
10   DatagramSocket datagramsocket1 = new DatagramSocket();
11   DatagramSocket datagramsocket2 = new DatagramSocket(10000);
12  
13   UdpSend send = new UdpSend(datagramsocket1);
14   UdpReceive receive = new UdpReceive(datagramsocket2);
15   Thread thread1 = new Thread(send);
16   Thread thread2 = new Thread(receive);
17   thread1.start();
18   thread2.start();
19  
20  }
21 }
22 class UdpSend implements Runnable{
23  private DatagramSocket datagramsocket = null;
24  UdpSend(DatagramSocket socket){
25   this.datagramsocket = socket;
26  }
27  public void run(){
28   BufferedReader buffer = null;
29    try{
30      buffer = new BufferedReader(new InputStreamReader(System.in));
31     String str = null;
32     while( (str = buffer.readLine())!=null)
33     {
34      if("886".equals(str))
35       break;
36      byte[] data = str.getBytes();
37      DatagramPacket datagrampacket = new DatagramPacket(data,data.length,InetAddress.getByName("192.168.1.255"),10000);
38      datagramsocket.send(datagrampacket);
39     }
40    }catch(Exception e){
41     throw new RuntimeException("出错啦");
42    }
43    finally{
44     try{
45      buffer.close();
46     }catch(Exception e){
47      throw new RuntimeException("出错啦");
48     }
49    }
50 }
51 }
52  
53 class UdpReceive implements Runnable{
54  private DatagramSocket datagramsocket = null;
55  UdpReceive(DatagramSocket socket){
56   this.datagramsocket = socket;
57  }
58  public void run(){
59   BufferedReader buffer = null;
60   while(true){
61    try{
62     byte[] data = new byte[1024];
63     DatagramPacket datagrampacket = new DatagramPacket(data,data.length);
64     datagramsocket.receive(datagrampacket);
65     String str = new String(datagrampacket.getData(),0,datagrampacket.getData().length);
66     String str2 = datagrampacket.getAddress().getHostAddress();
67     System.out.print(str2+":"+str);
68    }catch(Exception e){
69     throw new RuntimeException("出错啦");
70    }
71   }
72    
73    
74    
75   }
76  }
 1 练习
 2 /*
 3  * 把客户端的一个文件传到服务端去,并且在服务端中存储起来
 4  */
 5 package bolgtest;
 6 import java.io.*;
 7 import java.net.*;
 8 public class ClientTest {
 9  public static void main(String[] args) {
10   try{
11    Socket socket = new Socket("192.168.1.101",10000);
12    BufferedWriter buffwriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
13    BufferedReader clientreader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
14    BufferedReader buffread = new BufferedReader(new FileReader("F:\\BaiduYunDownload\\client.txt"));
15    String str =null;
16    while((str = buffread.readLine())!=null){
17     buffwriter.write(str);
18     buffwriter.newLine();
19     buffwriter.flush();
20    }
21    socket.shutdownOutput();
22    String str1 = null;
23    while((str1 = clientreader.readLine())!=null){
24     System.out.println(str1);
25    }
26   }catch(Exception e){
27    System.out.println(e.getMessage());
28   }
29  
30  
31  
32  }
33 }
34 
35 package bolgtest;
36 import java.io.*;
37 import java.net.ServerSocket;
38 import java.net.Socket;
39 public class ServerTest {
40  public static void main(String[] args)throws Exception {
41   ServerSocket server = new ServerSocket(10000);
42   Socket socket = server.accept();
43   BufferedReader buffreader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
44   BufferedWriter buffwriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
45   PrintWriter printwriter = new PrintWriter(new FileWriter("F:\\BaiduYunDownload\\copy.txt"),true);
46   String str = null;
47   while((str = buffreader.readLine())!=null){
48    printwriter.println(str);
49   }
50   buffwriter.write("上传成功");
51   buffwriter.newLine();
52   buffwriter.flush();
53  
54  }
55 }
56 
57 
58 
59 
60 
61 
62 
63 
64   

 

posted @ 2015-12-26 14:07  yuemingxingxing  阅读(120)  评论(0编辑  收藏  举报