Scoket:TCP通讯模型

简介:
Socket编程模型是Java网络编程的基础,在Socket API的基础上,可以做出更多的网络应用程序,比如FTP、HTTP、QQ等通讯工具都可以通过Socket API来实现。
 
一、最简单的Socket编程模型:
 
package lavasoft.ex1; 

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

/** 
* 最简单的ScoketServer 

* @author leizhimin 2009-11-20 21:54:37 
*/
 
public  class TestServer { 
         public  static  void main(String[] args)  throws IOException { 
                ServerSocket ss =  new ServerSocket(9999); 
                 while ( true) { 
                        System.out.println( "------------"); 
                        Socket s = ss.accept(); 
                        System.out.println(s.getLocalPort() +  " " + s.getPort() +  " " + s.getLocalAddress().getHostAddress()); 
                        System.out.println(s.getInetAddress().getHostAddress() +  ":" + s.getPort() +  "客户端已经连接上了服务端ServerSocket!"); 
                } 
        } 
}
 
import java.io.IOException; 
import java.net.Socket; 

/** 
* 最简单的Socket 

* @author leizhimin 2009-11-20 22:04:40 
*/
 
public  class TestClient { 
         public  static  void main(String[] args)  throws IOException { 
                 for ( int i = 0; i < 5; i++) { 
                        Socket s =  new Socket( "192.168.1.101", 9999); 
                        s.close(); 
                } 
        } 
}
 
先启动服务端,然后再启动客户端。
服务端的控制台显示:
------------ 
9999 1863 192.168.1.101 
192.168.1.101:1863客户端已经连接上了服务端ServerSocket! 
------------ 
9999 1864 192.168.1.101 
192.168.1.101:1864客户端已经连接上了服务端ServerSocket! 
------------ 
9999 1865 192.168.1.101 
192.168.1.101:1865客户端已经连接上了服务端ServerSocket! 
------------ 
9999 1866 192.168.1.101 
192.168.1.101:1866客户端已经连接上了服务端ServerSocket! 
------------ 
9999 1867 192.168.1.101 
192.168.1.101:1867客户端已经连接上了服务端ServerSocket! 
------------ 
 
客户端的没有输出。
 
二、服务端向客户端发送数据,客户端接收数据
 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

/** 
* 向客户端发送数据 

* @author leizhimin 2009-11-21 0:28:42 
*/
 
public  class TestServer { 
         public  static  void main(String[] args)  throws IOException { 
                ServerSocket ss =  new ServerSocket(9999); 
                 while ( true) { 
                        System.out.println( "--------------server端------------"); 
                        Socket s = ss.accept(); 
                        DataOutputStream dos =  new DataOutputStream(s.getOutputStream()); 
                        System.out.println( "客户端[" + s.getInetAddress().getHostAddress() +  ":" + s.getPort() +  "]已经连接!"); 
                        dos.writeUTF( "服务端写入客户端的数据:客户端[" + s.getInetAddress().getHostAddress() +  ":" + s.getPort() +  "]已经连接上服务端[" + s.getLocalAddress().getHostAddress() +  ":" + s.getLocalPort() +  "]!"); 
                        dos.flush(); 
                        dos.close(); 
                        s.close(); 
                } 
        } 
}
 
import java.io.DataInputStream; 
import java.io.IOException; 
import java.net.Socket; 

/** 
* 客户端接收服务端数据 

* @author leizhimin 2009-11-21 0:28:53 
*/
 
public  class TestClient { 
         public  static  void main(String[] args)  throws IOException { 
                System.out.println( "--------------client端------------"); 
                 for ( int i = 0; i < 5; i++) { 
                        Socket s =  new Socket( "192.168.1.101", 9999); 
                        DataInputStream dis =  new DataInputStream(s.getInputStream()); 
                        System.out.println( "客户端接收的服务端数据:" + dis.readUTF()); 
                        dis.close(); 
                        s.close(); 
                } 
        } 
}
 
服务端控制台:
--------------server端------------ 
客户端[192.168.1.101:1868]已经连接! 
--------------server端------------ 
客户端[192.168.1.101:1869]已经连接! 
--------------server端------------ 
客户端[192.168.1.101:1870]已经连接! 
--------------server端------------ 
客户端[192.168.1.101:1871]已经连接! 
--------------server端------------ 
客户端[192.168.1.101:1872]已经连接! 
--------------server端------------
 
客户端控制台:
--------------client端------------ 
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1868]已经连接上服务端[192.168.1.101:9999]! 
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1869]已经连接上服务端[192.168.1.101:9999]! 
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1870]已经连接上服务端[192.168.1.101:9999]! 
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1871]已经连接上服务端[192.168.1.101:9999]! 
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1872]已经连接上服务端[192.168.1.101:9999]! 

Process finished with exit code 0
 
三、两端同时读写数据
 
相关文章
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
751 4
|
域名解析 网络协议 安全
计算机网络TCP/IP四层模型
本文介绍了TCP/IP模型的四层结构及其与OSI模型的对比。网络接口层负责物理网络接口,处理MAC地址和帧传输;网络层管理IP地址和路由选择,确保数据包准确送达;传输层提供端到端通信,支持可靠(TCP)或不可靠(UDP)传输;应用层直接面向用户,提供如HTTP、FTP等服务。此外,还详细描述了数据封装与解封装过程,以及两模型在层次划分上的差异。
2595 13
|
网络协议 网络架构
OSI 模型和 TCP/IP 模型的异同
OSI 模型和 TCP/IP 模型的异同
844 1
|
网络协议 数据安全/隐私保护 网络架构
OSI七层模型和TCPIP五层模型
OSI七层模型和TCPIP五层模型
|
网络协议 数据安全/隐私保护 网络架构
|
网络协议 网络架构
TCP/IP协议架构:四层模型详解
在网络通信的世界里,TCP/IP协议栈是构建现代互联网的基础。本文将深入探讨TCP/IP协议涉及的四层架构,以及每一层的关键功能和作用。
3344 5
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
2593 2
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
网络协议 算法 程序员
【网络】TCP/IP 五层网络模型:网络层
【网络】TCP/IP 五层网络模型:网络层
1124 2
|
网络协议 网络架构
【网络】TCP/IP 五层网络模型:数据链路层
【网络】TCP/IP 五层网络模型:数据链路层
473 1

热门文章

最新文章