socket网络编程

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 条评论) “”
   
验证码:

相关文章

推荐文章