在计算机领域中,Socket也被称为套接字编程,它是计算机之间进行通信的一种约定或者说是一种方式。
应用程序可以通过它发送或者接收数据,可以对其发送过来的内容像处理文件一样,打开、关闭或者读写等操作,套接字允许应用程序将I/O插入到互联网上,并与网络中的其他程序进行通信。
Server
package SocketDemo4; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class S4 { static ServerSocket server; public S4(int port){ try { System.out.println("Starting server~~"); server = new ServerSocket(port); System.out.println("Server started!"); } catch (IOException e) { e.printStackTrace(); } } public void start(){ Scanner scanner = new Scanner(System.in); while (true) { try { Socket sa = server.accept(); new Thread(new Runnable() { @Override public void run() { try { System.out.println("New Client (" + sa.getRemoteSocketAddress() + ") connected!"); InputStream is = sa.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String s; while ((s= br.readLine()) != null){ System.out.println("Receive message from (" + sa.getRemoteSocketAddress() + "): " + s); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { S4 s = new S4(16666); s.start(); } }
Client
package SocketDemo4; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class C4 { static Socket client; public C4(int port){ try { System.out.println("Starting client~~"); client = new Socket("localhost",port); System.out.println("Client started!"); } catch (Exception e) { e.printStackTrace(); } } public void start(){ Scanner sc = new Scanner(System.in); String s; PrintWriter pw = null; try { OutputStream os = client.getOutputStream(); pw = new PrintWriter(os,true); } catch (Exception e) { e.printStackTrace(); } while (true){ System.out.println("Please enter your message to server: "); s = sc.nextLine(); if ("exit".equalsIgnoreCase(s)){ pw.close(); System.out.println("Client close!"); break; } pw.println(s); } } public static void main(String[] args) { new C4(16666).start(); } }