Socket,套接字就是两台主机之间逻辑连接的端点。 TCP/IP协议是传输层协议,主要解决数据如何 在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 Socket是通信的基石,是支持TCP/IP协 议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息 息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。
Socket整体流程
首先在服务端创建一个套接字serversocket,并将它附加到一个端口上,服务器从这个端口监听连接,端口号的范围可以是0到65535,但是一般0-1024是为特权服务保留的,可以选择一个当前没有被其他进程占用的端口号。
客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接 字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。
代码实现:
服务端
package com.socket.server;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java. net.ServerSocket ;import java.net.Socket ;import java.util.concurrent.ExecutorService ;import java.util.concurrent.Executors;public class ServiceDemo{ public static void main(String[]args){ ExecutorService executorService=Executors.newCachedThreadPool(); ServerSocket serverSocket=new ServerSocket(8000); System.out.println ("服务器已启动") ; while(true){ Socket socket=serverSocket.accept(); System.out.println("客户端连接"); executorService.execute(new Runnable(){ @Override public void run(){ handle(socket); } }); } public static void handle(Socket socket){ try{ InputStream in=socket.getInputStream(); byte[]b=new byte[1024]; in read=in.read(b); System.out.println("客户端发送的消息:"+new String(b,0,read)); OutputStream out=socket.getOutputStream(); out.write("服务端返回".getBytes()); }catch(Exception e){ e.printStackTrace(); }finally{ try{ //关闭连接 socket.close(); }catch(IOException e){ e.printStackTrace(); } } } }}客户端
package com.socket.client;import java.io.InputStream ;import java.io.OutputStream ;import java.net.Socket ;import java.uti l.Scanner ;public class ClientDemo{ public static void main(String[]args){ while(true){ Socket socket=new Socket("127.0.0.1",8000); OutputStream out=socket.getOutputStream(); System.out.println("请输入"); Scanner sc=new Scanner(System.in); String msg=sc.nextLine(); out.write(msg.getBytes()); InputStream in=socket.getInputStream(); byte b[]=new byte[1024]; int read=in.read(b); System.out.println(new String(0,read,b)); socket.close(); } }}这样就实现了简单的客户端和服务端通信
| 留言与评论(共有 0 条评论) “” |