《基于Socket的网络编程.ppt》由会员分享,可在线阅读,更多相关《基于Socket的网络编程.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、运行简易的聊天程序运行简易的聊天程序A机器上运行服务器端程序B机器上运行客户端程序运行简易的聊天程序运行简易的聊天程序客户端界面上点击“连接”,输入A机器(服务器端程序所在机器)IP如果IP无误,显示连接服务器成功运行简易的聊天程序运行简易的聊天程序 本章要求本章要求l掌握掌握基于基于Socket的网络编程的网络编程的的基本方法基本方法本章内容本章内容a程序b程序主机A:172.18.29.100主机B:172.18.29.103如何通信?网络预备知识预备知识-IPlIP地址地址主机在主机在Internet上的标识上的标识 例如:例如:222.192.238.100QQHTTPMSNftp主机
2、A:222.192.238.100222.192.238.100a程序只靠只靠IPIP地址,能地址,能跟跟QQQQ通信吗?通信吗?预备知识预备知识-端口端口l一台机器只通过一条链路连接到网络上,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了。l端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。httpftpQQ21telnet端口端口23804000客户程序客户程序222.192.238.100222.192.238.100:40004000主机A:222.192.238.100222.192.238.100预备知识预备知识-端口端口
3、l端口号是用一个整数来表达的,其范围为065535,其中01023为系统所保留,专门给那些通用的服务,如http服务的端口号为80,telnet服务的端口号为23,ftp服务的端口为21.l当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。客户客户/服务器模式服务器模式监听发送连接请求接受请求客户端(主叫)服务器端(被叫)连接建立开始通话结束通话客户客户/服务器模式服务器模式l客户端向服务器端发送请求,服务器端客户端向服务器端发送请求,服务器端响应请求。响应请求。l客户端从客户端从尝试尝试与服务器端与服务器端建立连接建立连接开始,开始,服务器服务器接受接受连接。一旦建立
4、连接,客户连接。一旦建立连接,客户端和服务器就可以通过套接字端和服务器就可以通过套接字(socket)进行通信。进行通信。基于基于SocketSocket的网络编程的网络编程l套接字是两台主机之间逻辑连接的端点。套接字是两台主机之间逻辑连接的端点。lJava中基于中基于Socket的网络编程用到的包的网络编程用到的包 /消息传递消息传递Program A at 172.18.29.100Program A at 172.18.29.100:50005000Program B at 172.18.29.102Program B at 172.18.29.102:27002700SocketSoc
5、ket服务器端的监听步骤服务器端的监听步骤1)创建)创建ServerSocket对象,对象,为服务器对象绑定端口号,为服务器对象绑定端口号,服务器服务器端在这个端口等待客户端的连接端在这个端口等待客户端的连接,如果企图使用一个已经使用的如果企图使用一个已经使用的端口,会引起端口,会引起java.util.BindException ServerSocket server=new ServerSocket(5555);2)创建服务器套接字之后,服务器端使用下面的语句监听连接:)创建服务器套接字之后,服务器端使用下面的语句监听连接:Socket serverSocket=server.accept
6、();此语句会一直等待,直到一个客户端与该服务器端建立连接。此语句会一直等待,直到一个客户端与该服务器端建立连接。服务器套接字客户端的连接步骤客户端的连接步骤3)呼叫服务器端,创建一个)呼叫服务器端,创建一个Socket对象对象,构造函数的两个参数分构造函数的两个参数分别为别为服务器端的服务器端的IP地址以及端口号地址以及端口号 Socket clientSocket=new Socket(127.0.0.1,5555);l客户端程序将会连接指定客户端程序将会连接指定IP地址主机上的指定端口,连接成功之地址主机上的指定端口,连接成功之后,便能产生客户端的后,便能产生客户端的Socket对象,用
7、于和服务器端进行通信对象,用于和服务器端进行通信通信双方通信双方Socket的产生过程的产生过程服务器端程序:服务器端程序:ServerSocketServerSocket server=new server=new ServerSocket(ServerSocket(55555555););Socket Socket serverSocketserverSocket=server.accept();=server.accept();客户端程序:客户端程序:Socket Socket clientSocketclientSocket=new Socket(=new Socket(“服务器端服务
8、器端IP,5555);IP,5555);呼叫clientSocketclientSocketserverSocketserverSocket接受通过通过Socket接收和发送消息接收和发送消息ServerServerserverSocketserverSocket接受连接接受连接Close Close serverSocketClientClientclientSocket与服务器建立连接与服务器建立连接Close Close clientSocketOutputStreamOutputStreamInputStreamInputStreamOutputStreamOutputStreamIn
9、putStreamInputStream通过套接字进行数据传输通过套接字进行数据传输-获得输获得输入输出流入输出流l连接建立之后,服务器端和客户端的通信就像连接建立之后,服务器端和客户端的通信就像I/O流一样进行:流一样进行:InputStream in=socket.getInputStream();OutputStream out=socket.getOutputStream();服务器端消息发送服务器端消息发送DataOutputStreaml DataOutputStream out=new DataOutputStream(serverSocket.getOutputStream()
10、;l out.writeUTF(“消息内容消息内容);消息内容消息内容clientSocketserverSocket客户端消息发送客户端消息发送DataOutputStreaml DataOutputStream out=new DataOutputStream(clientSocket.getOutputStream();l out.writeUTF(“消息内容消息内容);消息内容消息内容clientSocketserverSocket客户端消息接收客户端消息接收 DataInputStreamlDataInputStream in=new DataInputStream(serverSo
11、cket.getInputStream();lString s=in.readUTF();sclientSocketserverSocket客户端消息接收客户端消息接收 DataInputStreamlDataInputStream in=new DataInputStream(clientSocket.getInputStream();lString s=in.readUTF();sclientSocketserverSocket关闭关闭Socket连接连接lSocket对象对象.close();线程在网络编程中的使用线程在网络编程中的使用lChatServerFrame.javalChatClientFrame.java服务多客户服务多客户l多个客户端同时访问时,无论何时,只要建立一个新的连接,多个客户端同时访问时,无论何时,只要建立一个新的连接,就创建一个新线程来处理服务器端和新客户端的通信,这样就创建一个新线程来处理服务器端和新客户端的通信,这样就可以有多个连接同时运行。就可以有多个连接同时运行。