使用java实现了server/client对话的功能。
运行时需先运行服务端,再运行客户端。
每次客户端发送一条消息,服务端接收一条消息,然后服务端再发送一条消息,客户端再接收一条消息。
程序实现如下:
客户端:
1 public class Client { 2 static Socket client; 3 4 public Client() { 5 try { 6 //链接 本机的 9999 端口 7 client = new Socket("127.0.0.1", 9999); 8 } catch (Exception e) { 9 System.out.println("Client输入输出错误!" + e); 10 } 11 } 12 13 public static void send(String msg) { 14 try { 15 //获得实时刷新的输出流 16 PrintWriter out = new PrintWriter(client.getOutputStream(), true); 17 out.println("Client:" + msg); 18 //out.close(); 19 } catch (IOException e) { 20 System.out.println("send输入输出错误!" + e); 21 } 22 } 23 24 public static void listen() { 25 try { 26 System.out.println("Listening!......"); 27 //获得输入流 28 InputStreamReader in = new InputStreamReader(client.getInputStream()); 29 BufferedReader br = new BufferedReader(in); 30 //读取一行并打印出来 31 System.out.println(br.readLine()); 32 } catch (IOException e) { 33 System.out.println("Listen ERRO!" + e); 34 } 35 } 36 37 public static void main(String[] args) { 38 String msg = ""; 39 Client cl = new Client(); 40 Scanner cin = new Scanner(System.in); 41 while (!msg.equals("#")) { 42 //cl=new Client(); 43 System.out.print("输入信息:"); 44 msg = cin.nextLine(); 45 cl.send(msg); 46 cl.listen(); 47 } 48 } 49 }
服务端:
1 public class Server { 2 static ServerSocket server; 3 static Socket s; 4 public Server(){ 5 try { 6 System.out.println("启动服务器!"); 7 //监听本地9999端口 8 server = new ServerSocket(9999); 9 //等待客户端链接创建Socket对象 10 s = server.accept(); 11 }catch(IOException e){ 12 System.out.println("输入输出错误!"+e); 13 } 14 } 15 public void listen(){ 16 try { 17 System.out.println("Listening!......"); 18 //从Socket中获得输入流 19 InputStreamReader in = new InputStreamReader(s.getInputStream()); 20 BufferedReader br=new BufferedReader(in); 21 //读取输入流中的一行并输出 22 System.out.println(br.readLine()); 23 }catch(IOException e){ 24 System.out.println("输入输出错误!"+e); 25 } 26 } 27 public static void send(String msg) 28 { 29 try { 30 //从Socket中获得<span style="color:#FF0000;">实时刷新</span>输出流, 31 PrintWriter out=new PrintWriter(s.getOutputStream(),true); 32 //向输出流中写入一行数据 33 out.println("Server:"+msg); 34 }catch(IOException e){ 35 System.out.println("send输入输出错误!"+e); 36 } 37 } 38 public static void main(String[] args){ 39 Server se=new Server(); 40 String msg=""; 41 Scanner cin=new Scanner(System.in); 42 //输入“#” 表示停止 43 while(!msg.equals("#")) { 44 //接收信息 45 se.listen(); 46 System.out.print("输入信息:"); 47 msg=cin.nextLine(); 48 //发送信息 49 se.send(msg); 50 } 51 } 52 }
程序执行如下图所示:
socket通信的基本步骤:
扫描二维码关注公众号,回复:
8124762 查看本文章
(1)在服务器端指定一个端口号创建ServerSocket,调用accept()方法等待接收来自客户端的连接。
(2)客户端创建socket连接服务端。
(3)打开socket的输入输出流。
(4)利用输入输出流对socket进行读写
(5)关闭流和socket
如下图所示为java socket的API:
java中创建一个socket实际上对应了linux中socket API中的socket的创建,bing()及listen()。
java中socket的accept方法对应socket API中的accept(),java中的socket的输入流的readLine()则对应着socket API中的recv()方法。