• 1. 主 要 内 容 TCP协议Socket编程1 UDP协议Socket编程2 Socket编程实例 3 JavaMail邮件编程4
  • 2. Socket通讯网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。 Socket通常用来实现客户方和服务方的连接。
  • 3. 两类传输协议TCP (Transport Control Protocol ) 面向连接的能够提供可靠的流式数据传输的协议。类似于打电话的过程。 URL, URLConnection, Socket, ServerSocket等类都使用TCP协议进行网络通讯。 UDP (User Datagram Protocol ) 非面向连接的提供不可靠的数据包式的数据传输的协议。类似于从邮局发送信件的过程。 DatagramPacket, DatagramSocket, MulticastSocket等类使用UDP协议进行网络通讯。
  • 4. 1. TCP协议Socket编程Java中与 Socket编程相关的包: import java.io.*; import java.net.*; Java 中提供了两类的TCP Socket: 服务器端: java.net.Serversocket 客户端: java.net.socket
  • 5. 2. TCP Socket通信的过程Client-server and ServiceServerClientServiceshttp(80)SMTP(25)FTP(21)Telnet(23)
  • 6. Socket通信过程(1)服务器建立监听进程,监听每个端口是否要求进行通信. (2)客户端创建一个Socket对象,向服务器端发送连接请求. (3)服务器监听到客户端的连接请求,创建一个Socket,与客户端进行通信. (4)建立接收和发送两个缓存区,并打开Socket及其输入、输出流. (5)根据协议读写Socket内容. (6)通信结束后关闭Socket.
  • 7. Socket通信过程new Socketnew SocketServerSocketClientServerRead/Write DataRead/Write DataClose SocketClose SocketwaitrequestconnectacceptsendI/O streamreceivereceivesendclosedisconnectclose
  • 8. 服务器端常用函数Public ServerSocket(port) throws IOException Public Accept() throws IOException Public close() throws IOException Public SetSoTimeout(int timeout) throws IOException //设置最大监听时间
  • 9. 客户端常用函数Public Socket(address, port) throws IOException Public void close() throws IOException Public InetAddress getInetAddress() Public InputStream getInputStream() throws IOException Public InetAddress getlocalAddress() Public int getLocalPort() Public OutputStream getOutputStream() throws IOException
  • 10. 客户端常用函数Public int getReceiveBufferSize() throws SocketException Public int getSendBufferSize() throws SocketException Public boolean isClosed() Public boolean isConnected Public void setSendBufferSize(int size) throws SocketException Public void setReceiveBufferSize(int size) throws SocketException
  • 11. Socket通信模式单线程Socket通信 多用户排队Socket通信 多线程Socket通信
  • 12. 创建socketSocket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int port); Socket(String host, int port, boolean stream); ServerSocket(int port); ServerSocket(int port, int count);
  • 13. 客户端Socket的建立try{ Socket socket=new Socket(”127.0.0.1",2000); }catch(IOException e){ System.out.println("Error:"+e); }
  • 14. 服务器端Socket的建立ServerSocket server=null; try { server=new ServerSocket(2000); }catch(IOException e){ System.out.println("can not listen to :"+e); } Socket socket=null; try { socket=server.accept(); }catch(IOException e){ System.out.println("Error:"+e); }
  • 15. 打开输入/出流PrintStream os=new PrintStream (newBufferedOutputStream(socket.getOutputStream())); DataInputStream is= New DataInputStream(socket.getInputStream());
  • 16. 关闭socketos.close(); is.close(); socket.close();
  • 17. 多线程的Socket通信Thread ASocketThread BSocketServerSocketClient AClient BClient CThread CSocket
  • 18. 多线程的Socket通信Thread类 Runnable类 用法: private class Getinfo implements Runnable //定义一个内部类,接收消息 { public void run() { 接收消息 } }
  • 19. 多线程的Socket通信线程的调用 GetInfo getinfo=new Getinfo(); Thread t=new Thread(getinfo); t.start();
  • 20. Socket通信实例多线程在线聊天室程序
  • 21. 2.UDP协议Socket编程Java中与 Socket编程相关的包: import java.io.*; import java.net.*; Java 中提供了两类的UDP Socket: 数据包类: java.net.DatagramPacket Socket类: java.net.DatagramSocket
  • 22. 2.UDP 协议Socket通信将数据的目的地信息包含在数据包中,然后直接传送到网络上,由网络设备根据数据包中的目的地信息寻找目的地主机,这种方式不能保证数据能够及时、安全的到达目的地,甚至不能保证数据能够到达目的地。 UDP通信适合用在对数据质量要求不高的场合。
  • 23. UDP Socket通信的过程1. 接收端建立一个接收的DatagramSocket对象,在指定端口进行监听。建立一个DatagramPacket对象指定数据包的缓冲区。 发送端建立一个DatagramPacket对象,指定发送的数据、数据长度、目的地主机、端口号等信息,然后建立一个DatagramSocket对象,调用send()方法发送DatagramPacket对象指定的数据。 接收端监听端口接收到数据报后将接收的数据保存在缓冲区,同时保存发送端的主机地址和端口号,回复消息给发送方。
  • 24. DatagramPacket类的主要函数主要构造方法: DatagramPacket(byte[] buf, int length)             构造 DatagramPacket,用来接收长度为 length 的数据包。 DatagramPacket(byte[] buf, int length, InetAddress address, int port)      构造数据报包,用来将长度为 length 的包发送到指定主机上 的指定端口号。
  • 25. DatagramPacket类的主要函数Public InetAddress getAddress(); Public byte[] getData(); Public int getlength(); Public int getoffset(); Public getport(); Public SocketAddress getSocketAddress(); Public void setAddress(InetAddress iaddr); Public void setData(byte[] buf);
  • 26. DatagramPacket类的主要函数Public void setlength(int length); Public void setport(int iport); Public void setsocketAddress(SocketAddress address)
  • 27. DatagramSocket类的主要函数构造方法: Public DatagramSocket() throws SocketException Public DatagramSocket(int port) throws SocketException Public DatagramSocket(int port, InetAddress laddr) throws SocketException
  • 28. DatagramSocket类的主要函数Public void close(); Public void connect(address, port) Public void disconnect(); Public inetaddress getinetaddress(); Public inetaddress getlocaladdress(); Public int getLocalPort(); Public int getport();
  • 29. DatagramSocket类的主要函数Public int getReceiveBufferSize() throws SocketException Public int getSendBufferSize() throws SocketException Public void setSendBufferSize(int size) throws SocketException Public void setReceiveBufferSize(int size) throws SocketException
  • 30. DatagramSocket类的主要函数Public boolean isclosed(); Public boolean isconnected(); Public void receive(DatagramPacket p) throws IOException Public void send(DatagramPacket p) throws IOException
  • 31. UDP Socket应用实例获得UDP端口号 UDP通信服务端 UDP通信客户端