码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程

时间:2015-05-09 10:10:02      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

1、网络模型

1)OSI参考模型

2)TCP/IP协议

技术分享

2.网络通讯要素

1)IP地址(IntAddress已经封装成了对象)

1.网络中设备的标识

2.不易记忆,可用主机名

3.本地IP地址:127.0.01 主机 名:localhost

2)端口号(数字标识,没有必要封装成对象)

1.用于标识进程的逻辑地址,不同进程的标识。

2.有效端口:0~65535,其中0~1024系统使用或保留端口

3)传输协议

1.通讯的规则

2.常见协议:TCP, UDP

3.网络通讯过程

1)找到对方IP.

2)数据要发到对方指定的应用程序上,为了标识这些应用程序,所以这些网络应用程序都用数字进行了标识。为了方便称呼这个数字,叫做端口。

IntAddress

 1 package com.lovo.chat;
 2 
 3 import java.net.InetAddress;
 4 
 5 public class IntAddressTest {
 6 
 7     public static void main(String[]args) throws Exception {
 8         //获取IntAddress对象
 9         InetAddress i = InetAddress.getLocalHost();
10         //获取IP地址
11         String ip = i.getHostAddress();
12         //获取主机的名称
13         String hostName = i.getHostName();
14 
15         System.out.println("IP地址" + ip);
16         
17         System.out.println("主机名" + hostName);
18         
19         InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
20         
21          System.out.println(inetAddress.getHostAddress());
22         
23          System.out.println(inetAddress.getHostName());
24 
25     }
26 
27 }

(网络编程-UDP-TCP)

UDP特点:(面向无连接)(聊天)

1.将数据及源和目的封装成数据包中,不需要建立连接。(封包,无连接)

2.每个数据包的大小限制在64K内。(小数据)

3.因无连接,是不可靠协议。

4.不需要建立连接,速度快。

TCP特点:(面向连接)(下载)

1.建立连接,形成传输数据的通道。(传输,连接)

2.在连接中进行大数据量传输。(大数据)

3.是可靠的协议

(网络编程-Socket)(Socket也称套接字)

1.Socket就是为网络服务提供的一种机制。

2.通信的两端都有Socket

3.网络通信其实就是Socket间的通信

4.数据在两个Socket间通过IO传输

UDP

 1 package com.lovo.UDP;
 2 
 3 import java.net.DatagramPacket;
 4 import java.net.DatagramSocket;
 5 import java.net.InetAddress;
 6 
 7 /**
 8  * 发送
 9  * @author Mine
10  *
11  */
12 /*
13  * 思路:
14  * 1.建立UDP Socket服务
15  *     2.提供数据,并将数据封装到数据包中
16  * 3.通过Socket服务的发送功能,将数据包发送出去
17  * 4.关闭资源
18  * */
19 public class Send {
20 
21     public static void main(String[ ] args) throws Exception {
22 
23         // 1.创建UDP服务,通过DatagramSocket对象。
24 
25         DatagramSocket ds = new DatagramSocket(888);
26 
27         // 2.确定数据,并封装成数据包。
28 
29         // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
30 
31         byte[] buf = "Hello World!".getBytes();
32 
33         DatagramPacket  dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
34 
35         // 3.通过socket服务,将已有的数据包发送出去,通过Send方法。
36 
37         ds.send(dp);
38 
39         // 4.关闭资源。
40 
41         ds.close();
42 
43     }
44 
45 }
 1 package com.lovo.UDP;
 2 
 3 import java.net.DatagramPacket;
 4 import java.net.DatagramSocket;
 5 
 6 /**
 7  * 接收
 8  * 
 9  * @author Mine
10  *
11  */
12 /*
13  * 思路:
14  * 1.建立UDP Socket服务
15  * 2.建立一个数据包,用于存储监听到的端口的数据把接收到的数据封装的数据包,就可以操作数据包对象
16 *
17 * 3.通过Socket服务的监听功能,将接收到的数据存入到已经定义好的数据包中 18 * 4.通过数据包对象的特有功能,讲这些不同的数据取出,打印在控制台上 19 * 5.关闭资源 20 * 21 * */ 22 public class Receive { 23 24 public static void main(String... args) throws Exception { 25 26 // 1.创建udp的Socket服务,建立端点。 27 28 DatagramSocket ds = new DatagramSocket(10000); 29 30 // 2.预定义数据包,用于存储接收数据。 31 32 byte[] buf = new byte[1024]; 33 34 DatagramPacket dp = new DatagramPacket(buf, buf.length); 35 36 // 3.通过服务的receive方法,将收到的数据存入到定义好的数据包中。 37 38 ds.receive(dp); 39 40 // 4.通过数据包中的方法获取其中的数据。 41 42 String ip = dp.getAddress().getHostAddress(); 43 44 int port = dp.getPort(); 45 46 String data = new String(dp.getData(), 0, dp.getLength()); 47 48 System.out.println("IP地址:" + ip + "..." + data + "...端口:" + port); 49 50 // 5.关闭资源。 51 52 ds.close(); 53 54 } 55 56 }

TCP

 1 package com.lovo.TCP;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStreamWriter;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10 /**
11  * 服务器
12  * @author Mine
13  *
14  */
15 public class ServerTest {
16         public static void main(String[] args) throws IOException{
17                 /*创建ServerSocket对象  参数为指定的端口服务器*/
18                 ServerSocket server=new ServerSocket(31223);
19                 /*设置超时的时间 才能连接到客户端上*/
20                 server.setSoTimeout(10000);
21                 /*等待客户端连接*/
22                 Socket socket=server.accept();
23                 //处理客户端数据
24                 /*从客户端读取数据  用缓冲区,把从客户端得到的字节的输入流 用转换流 转换成字符流*/
25                 BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
26                 char [] ch=new char[100];
27                 int len=reader.read(ch);
28                 System.out.println("(服务器发送)客户端接受到的消息是:severTest");
29                 System.out.println(new String(ch,0,len));
30                 
31                 /*向客户端写入数据 */
32                 BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
33                 writer.write("你好,客户端,服务器已接受到了你的消息  serverTest");
34                 writer.flush();
35                 //释放资源
36                 writer.close();
37                 reader.close();
38                 socket.close();
39                 server.close();
40         }
41 }
 1 package com.lovo.TCP;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStreamWriter;
 8 import java.net.Socket;
 9 
10 /**
11  * 客户端
12  * @author Mine
13  *
14  */
15 public class SocketTest {
16         public static void main(String[] args) throws IOException{
17             /*创建Socket对象*/
18             Socket socket=new Socket("127.0.0.1",31223);
19             /*利用已创建的socket创建输入输出流,处理与服务器的连接*/
20             //向服务器写入数据
21             BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
22             writer.write("你好,服务器,客户端已接收到你的消息 socketTest");
23             writer.flush();
24             
25             //向服务器读取消息
26             BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
27             char [] ch=new char[100];
28             int len=reader.read(ch);
29             System.out.println("(客户端发送)服务器接收到的消息");
30             System.out.println(new String(ch,0,len));
31             //释放资源
32             writer.close();
33             reader.close();
34             socket.close();
35         }
36 }

 

网络编程

标签:

原文地址:http://www.cnblogs.com/Melony/p/4489360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!