Java-第2章 了解Socket编程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} catch(Exception ei) { ei.printStackTrace(); }
Java分布式程序设计
19
信息工程学院
5. 使用Java进行Socket编程
3.4 关闭Socket---客户端
1. try { 2. is.close(); 3. os.close(); 4. cl.close(); 5. } catch (IOException x) { 6. System.out.println("Error writing...."+x); 7. }
• 由一个Internet地址和一个端口号组成 • 端口号:用于区别与运行在同一台机器的不同服 务。(1024 --- 65535)
Java分布式程序设计
5
信息工程学院
2. 什么是Socket?
2.1.2 Socket类型
–SOCK_STREAM
• 提供字节(Byte-to-Byte)流通信
–SOCK_DGRAM
4.1 客户端发送数据
1. 2. 3. 4. DatagramSocket ds = new DatagramSocket(); Byte buf[] ={‘h’,’e’,’l’,’l’,’o’}; InetAddress address = InetAddress.getByName(‚服务器名‛); DatagramPacket packet = new DatagramPacket(buf,buf.length,address,5555); 5. ds.send(packet);
BufferedReader、BufferedWriter FileInputStream、FileOutputStream DataInputStream、DataOutputStream 这些类型的流都可以从InputStream类和 OutputStream类转化
Java分布式程序设计
11
信息工程学院
Java分布式程序设计
8
Байду номын сангаас 信息工程学院
4. 客户/服务器通信
• 客户/服务器通信 的一般步骤
Java分布式程序设计
9
信息工程学院
5. 使用Java进行Socket编程
1. Java的网络编程支持
– Java.net包 – Socket类(TCP) – DatagramSocket类(UDP)
Java分布式程序设计
Java分布式程序设计
3
信息工程学院
2. 什么是Socket?
2.1 用户和网络间的接口(Socket)
Java分布式程序设计
4
信息工程学院
2. 什么是Socket?
2.1.1 通信基于Socket对 套接字
–每个Socket属于一个通信进程 –进程间的通信就是一个进程的Socket和另 个进程的Socket间传输信息 –Socket地址
Java分布式程序设计
21
信息工程学院
5. 使用Java进行Socket编程
4. UDP Socket
–UDP Socket连接通过DatagramSocket类创建 –在每个通信的机器上,必须有一个连接到某端口的 DatagramSocket对象
• DatagramSocket connect = new DatagramSocket(5555);
Java分布式程序设计
17
信息工程学院
5. 使用Java进行Socket编程
3.3 创建一个输出流---客户端
1. 2. 3. 4. 5. 6. DataOutputStream os = null; try { os = new DataOutputStream(cl.getOutputStream()); }catch(IOException e2){ System.out.println("Error io: "+e2); }
Java分布式程序设计
2
信息工程学院
1. 内部通信方式
• IO操作的执行顺序
– 打开:指明并获取要访问的文件或设备的许可 – 读写:从对象中读取数据、将数据传递给对象 – 关闭:提示系统已经使用完了对象
• Unix系统中相关进程间通信
– 管道(Pipe):将两个进程连接在一起的一个虚拟文件
例:cat myClass.java|lpr
10
信息工程学院
5. 使用Java进行Socket编程
2. 数据流
• • • •
– OutputStream类
– InputStream类
– 其他流
• • • •
提供write方法 可以通过Socket类的getOutputStream()方法得到 提供read方法 可以通过Socket类的getInputStream()方法得到
Java分布式程序设计
18
信息工程学院
5. 使用Java进行Socket编程
3.3 创建一个输出流---服务器端
1. 2. 3. 4. 5. 6. DataOutputStream is = null; try {
os = new DataOutputStream(clientSocket.getOutputStream());
Java分布式程序设计
15
信息工程学院
5. 使用Java进行Socket编程
3.2 创建一个输入流---客户端
1. BufferedReader is = null; 2. try { 3. is = new BufferedReader(new InputStreamReader(cl.getInputStream())); 4. }catch(IOException e2){ 5. System.out.println("Error io: "+e2); 6. }
Java分布式程序设计
23
信息工程学院
5. 使用Java进行Socket编程
4.2 服务器端接收数据
1. DatagramSocket sd = new DatagramSocket(5555);
2. Byte buf[] = new byte[256]; 3. DatagramPacket packet = new DatagramPacket(buf,buf.length); 4. sd.receive(packet);
• 用于数据报传输
–SOCK_RAW
• 提供给那些对信息传输进行高级控制的用户
Java分布式程序设计
6
信息工程学院
3. TCP/IP和UDP/IP通信
3.1 数据报通信协议(User Datagram Protocol,UDP)
–无连接协议 –可以在任何时刻发送数据 –需要附加发送方Socket和接收方Socket信息 –数据报不能超过64K –UDP协议无法保证所发送的数据报以同样地顺 序被对方接收。 –UDP协议是不可靠的协议 –UDP的复杂程度较低,需要的系统开销较小
Java分布式程序设计
25
信息工程学院
5. 使用Java进行Socket编程
例:加入到一个组,并发送一个问候
1. 2. 3. 4. 5.
6.
String msg = "Hello"; InetAddress group = InetAddress.getByName("228.5.6.7"); MulticastSocket s = new MulticastSocket(6789); s.joinGroup(group); DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 6789); s.send(hi);
Java分布式程序设计
13
信息工程学院
5. 使用Java进行Socket编程
3.1 打开一个Socket---服务器
1. 2. 3. 4. 5. 6. 7. 8. ServerSocket checkServer = null; public static final int TESTPORT=4000; try { checkServer = new ServerSocket(TESTPORT); System.out.println("SimpleServer started....."); }catch(IOException e) { System.out.println(e); }
或
• DatagramSocket connect = new DatagramSocket(); • Int portNumber = connect.getLocalPort();
–将数据封装到DatagramPacket对象来发送数据
Java分布式程序设计
22
信息工程学院
5. 使用Java进行Socket编程
Java分布式程序设计
14
信息工程学院
5. 使用Java进行Socket编程
3.1 打开一个Socket
• 服务器监听并接收客户请求
1. 2. 3. 4. 5. 6. Socket clientSocket = null; try { clientSocket = checkServer.accept(); }catch(Exception ei){ ei.printStackTrace(); }
Java分布式程序设计
24
信息工程学院
5. 使用Java进行Socket编程
5. 多点传送Socket
–MulticastSocket类
• 是DatagramSocket的子类 • 用于客户端 • 将Internet上的多点传送主机结合成组 • 用以监听服务器广播到客户的包
–多点传送的步骤
• 创建一个MulticastSocket对象 • 调用joinGroup()方法加入多点传送会话
1. 2. 3. 4. 5. 6. 7. 8. Socket c1=null; try { cl = new Socket("machine name",REMOTE_PORT); } catch(UnknownHostException e1) { System.out.println("Unknown Host: "+e1); } catch (IOException e2) { System.out.println("Error io: "+e2); }
5. 使用Java进行Socket编程
3. TCP Socket
– 使用Socket编写客户或服务器程序的步骤
1. 2. 3. 4. 打开一个Socket 创建一个数据输入流 创建一个数据输出流 关闭Socket
Java分布式程序设计
12
信息工程学院
5. 使用Java进行Socket编程
3.1 打开一个Socket ---客户端
Java分布式程序设计
20
信息工程学院
5. 使用Java进行Socket编程
3.4 关闭Socket---服务器端
1. try { 2. os.close(); 3. is.close(); 4. clientSocket.close(); 5. }catch(IOException ic) { 6. ic.printStackTrace(); 7. }
信息工程学院
第二章 了解Socket编程
授课教师:杨杰明
Java分布式程序设计
1
信息工程学院
目 录
1. 2. 3. 4. 5. 6. 7. 内部通信方式 什么是Socket TCP/IP和UPD/IP通信 客户服务器通信 使用Java进行Socket编程 Greetings服务器实例 解析Internet地址
Java分布式程序设计
7
信息工程学院
3. TCP/IP和UDP/IP通信
3.2 流通信协议(Transmission Control Protocol,TCP)
–面向连接的协议 –在通信之前必须在两个Socket之间建立连接 –发送数据时,不需要附加发送方和接收方信息 –对数据的大小没有限制 –TCP能够保证发送的数据被接收方以相同的顺序被接收 –TCP是可靠的传输协议 –建立TCP连接需要消耗系统时间
Java分布式程序设计
16
信息工程学院
5. 使用Java进行Socket编程
3.2 创建一个输入流---服务端
1. BufferedReader is = null; 2. try { 3. is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream( ))); 4. } catch(Exception ei) { 5. ei.printStackTrace(); 6. }