1、javasocket编程方案java socket 编程方案一、 网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主机, 另一个就是找到主机 后如何可靠高效的进行数据传输。在 TCP/IP 协议中 IP 层主要负责网络主机的定位,数据传输的路由, 由 IP 地址可以唯一地确定 Internet 上的一台主机。而TCP层则提供面向应用的可靠(tcp )的或非可靠(UDP的数据传 输机制,这是网络编程的主要对象,一般不需要关心 IP 层是如何处 理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信 双方一方作为服务器等待客户提出请求并予以响应。 客户则在需要服 务
2、时向服务器提 出申请。服务器一般作为守护进程始终运行,监听 网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户, 同时自己继续监听服务端口,使后来的客户也 能及时得到服务。二、 两类传输协议: TCP;UDPTCP是一种面向连接的保证可靠传输的协议。通过TCP议传输, 得到的是一个 顺序的无差错的数据流 。发送方和接收方的成对的两个 socket之间必须建立连接,以便在TCP协议的基础上进行通信,当 一个 socket (通常都是 server socket )等待建立连接时,另一个 socket 可以要求进行连接,一旦这两个 socket 连接起来,它们就可 以进行双向数据传输,双方
3、都可以进行发送 或接收操作。UDP是一种无连接的协议,每个数据报都是一个独立的信息,包 括完整的源地址或目的地址, 它在网络上以任何可能的路径传往目的 地,因此能否到达目的地, 到达目的地的时间以及内容的正确性都是 不能被保证的。比较:UDP 1每个数据报中都给出了完整的地址信息,因此无需要建 立发送方和接收方的连接。2,UDF传输数据时是有大小限制的, 每个被传输的数据报 必须限定在64KB之内。3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方TCP 1,面向连接的协议,在socket之间进行数据传输之前必 然要建立连接,所以在TCP中需要连接时间。2 , T
4、CP传输数据大小限制,一旦连接建立起来,双方的 socket 就可以按统一的格式传输大的 数据。3 , TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。应用:1,TCP在网络通信上有极强的生命力,例如远程连接(Telnet ) 和文件传输(FTP都需要不定长度的数据被可靠地传输。但是可靠 的传输是要付出代价的, 对数据内容正确性的检验必然占用计算机的 处理时间和网络的带宽。2,UDP操作简单,而且仅需要较少的监护,因此通常用于局域网 高可靠性的分散系统中 client/server 应用程序。例如视频会议系 统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,
5、 这种情况下显然使用UDP会更合理一些。三、 基于 Socket 的 java 网络编程1 ,什么是 Socket网络上的两个程序通过一个双向的通讯连接实现数据的交换,这 个双向链路的一端称为一个 Socket。 Socket 通常用来实现客户方和 服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面, 一个 Socket 由一个 IP 地址和一个端口号唯一确定。但是, Socket 所支持的协议种类也不光 TCP/IP 一种,因此两者 之间是没有必然联系的。在 Java 环境下, Socket 编程主要是指基于 TCP/IP 协议的网络编程。2,Socket 通讯的过程Ser
6、ver 端 Listen( 监听) 某个端口是否有连接请求, Client 端向Server端发出Connect(连接)请求,Server端向Client端发回Accept (接受)消息。一个连接就建立起来了。Server端和Client 端 都可以通过 Send, Write 等方法与对方通信。对于一个功能齐全的Socket,都要包含以下基本结构,其工作过 程包含以下四个基本的步骤:( 1) 创建 Socket;(2) 打开连接到 Socket 的输入/ 出流;( 3) 按照一定的协议对 Socket 进行读 / 写操作;( 4) 关闭 Socket.3,创建 Socketjava 在包中提
7、供了两个类 Socket 和 ServerSocket ,分别用来表示双向连接的客户端和服务端。 这是两个封装得非常好的类, 使用很方便。其构造方法如下:Socket(InetAddress address, int port);Socket(InetAddress address, int port, boolean stream);Socket(String host, int prot);Socket(String host, int prot, boolean stream);Socket(SocketImpl impl)Socket(String host, int port, In
8、etAddress localAddr,int localPort)Socket(InetAddress address, int port, InetAddresslocalAddr, int localPort)ServerSocket(int port);ServerSocket(int port, int backlog);ServerSocket(int port, int backlog, InetAddressbindAddr)其中 address 、host 和 port 分别是双向连接中另一方的 IP 地址、主机名和端 口号, stream 指明 socket 是流 sock
9、et 还是数据 报 socket , localPort 表示本地主机的端口号, localAddr 和 bindAddr 是本地机器的地址( ServerSocket 的主机地址), impl 是 socket 的父类,既可以用来创建 serverSocket 又可以用来创建 Socket 。例如:Socket client = new Socket(, 1223);ServerSocket server = new ServerSocket(1223);注意,在选择端口时,必须小心。每一个端口提供一种特定 的服务,只有给出正确的端口,才 能获得相应的服务。 01023 的端 口号为系统所保
10、留,例如 http 服务的端口号为 80,telnet 服务的端 口号为 21,ftp 服务的端口号为 23, 所以我们在选择端口号时,最好 选择一个大于 1023 的数以防止发生冲突。在创建 socket 时如果发生错误, 将产生 IOException ,在程 序中必须对之作出处理。 所以在创建 Socket 或 ServerSocket 是必须 捕获或抛出例外。4,简单的 Client/Server 程序1. 客户端程序import .*;import .*;public class TalkClient public static void main(String args) tryS
11、ocket socket=new Socket(,4700);服务器端程序import .*;import .*;import public class TalkServerpublic static void main(String args) tryServerSocket server=null;tryserver=new ServerSocket(4700);+e);tart();tart();1. socket 的 Util 辅助类package sterning;import .*;import .*;public class ClientSocket private String
12、 ip;private int port;private Socket socket = null;DataOutputStream out = null;DataInputStream getMessageStream = null;public ClientSocket(String ip, int port) = ip;= port;/ /*创建 socket 连接();if (socket != null)();throw e;finally public void sendMessage(String sendMessage) throwsException try out = ne
13、w DataOutputStream();if (Windows) (0x1);();return;if (Unix) (0x2);();return;if (Linux) (0x3);();else (sendMessage);();catch (Exception e) ();if (out != null)();throw e;finally public DataInputStream getMessageStream() throws Exception try getMessageStream = new DataInputStream(newBufferedInputStream
14、();return getMessageStream;catch (Exception e) ();if (getMessageStream != null)();throw e;finally public void shutDownConnection() try if (out != null)();if (getMessageStream != null)();if (socket != null)();catch (Exception e) 2. 客户端package sterning;import class ClientTest 设置成服务器 IPprivate ClientSo
15、cket cs = null;private String ip = localhost; / private int port = 8821;private String sendMessage = Windwos;public ClientTest() try if (createConnection() sendMessage();getMessage();catch (Exception ex) ();private boolean createConnection() cs = new ClientSocket(ip, port);try (); 连接服务器成功 ! );return
16、 true;catch (Exception e) 连接服务器失败 ! );return false;private void sendMessage() if (cs = null)return;try (sendMessage);catch (Exception e) 发送消息失败 !);private void getMessage() if (cs = null)return;DataInputStream inputStream = null; try inputStream = ();catch (Exception e) 接收消息缓存错误 );return;try / 本地保存路
17、径,文件名会自动从服务器端继承而来。String savePath = E:;int bufferSize = 8192;byte buf = new bytebufferSize;int passedlen = 0;long len = 0;savePath += ();DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(New BufferedOutputStream(newFileOutputStream(savePath);len = (); 文件的长度为 : + len + ); 开始接收文
18、件 !);while (true) int read = 0;if (inputStream != null) read = (buf);passedlen += read;if (read = -1) break; 文件接收了 + (passedlen * 100 / len) +%);(buf, 0, read); 接收完成,文件存为 + savePath + );(); catch (Exception e) I!接收消息错误 );return;public static void main(String arg) new Clie ntTest();7,服务器配置IBM System
19、X3200 M3 万万)基本参数产品类别 塔式产品结构 5U处理器CPU类型 In tel 至强3400CPU型号 Xeon X3430CPU频率智能加速主频标配CPL数1颗量最大CPL数1颗量制程工艺 45 nm三级缓存 8MB总线规格 DMI sCPU核心 四核(Lynn field )CPU线程数兀线程主板扩展槽2X全长PCIe x8第二代1X全长 PCIe x12X全长 PCI (32 位/33 MHz)1X PCIe x4 (用于 RAID-0,RAID-1 控制器)内存内存类型DDR3内存容量2GB内存插槽数量6最大内存容量32GB存储标配硬盘容量标配不提供最大硬盘容量4TB内部硬
20、盘架数最大支持4块英寸SATA硬盘热插拔盘位支持热插拔RAID模式Raid BR-10il光驱DVD-ROM网络网络控制器集成双千兆网卡显示系统显示芯片 Matrox G200eV, 16MB显存接口类型RJ-454X USB (后置)标准接口 1X并口2X串口Video管理及其他带IPMI和Serial over LAN (SOL的集成管理模块系统管理系统支持(IMM , IBM Systems Director ,Alert Standard F ormat ,IBM ServerGuide,硬件虚拟介质密钥(用于 可选远程在线支持)Microsoft Windows Server 2008 企业版,x64 企业版,标准版,x64标准版,数据中心版,X64数据中 心版Win dows Small Busi ness Server 2008Red Hat Li nuxSUSE Li nux电源性能电源数量1个电源功率纠错400W外观特征产品尺寸XX产品重量保修信息保修政策全球联保,享受三包服务质保时间3年质保备注3年部件,3年人工,3年现场
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1