socket编程代码示例(Head First系列)(单线程)

客户端和服务端的代码如下所示。写完代码,先运行服务端的代码,然后等待客户端连接,再运行客户端的代码,即可。

客户端代码如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.io.*;  
  2. import java.net.*;  
  3. public class DailyAdviceClient {  
  4.     public void go(){  
  5.               
  6.         try {  
  7.             Socket s=new Socket("127.0.0.1",4242);//建立对服务器的Socket连接  
  8.             //客户端从服务器读取数据  
  9.             //建立连接到socket上低层输入串流的InputStreamReader  
  10.             //InputStreamReader是低层和高层串流间的桥梁  
  11.             //s.getInputStream()从Socket取得输入串流  
  12.             InputStreamReader streamReader=new InputStreamReader(s.getInputStream());  
  13.             //建立BufferedReader来读取  
  14.             BufferedReader reader=new BufferedReader(streamReader);  
  15.             String adviceString=reader.readLine();  
  16.             System.out.println("Today you should: "+adviceString);    
  17.             //客户端向服务器发送数据     
  18.             //创建不带自动行刷新的PrintWriter对象,  
  19.             //如果添加第二个参数true,则为自动刷新,不需要写writer.flush()这行代码     
  20.             PrintWriter writer=new PrintWriter(s.getOutputStream());  
  21.             writer.println("Hello,I am Client2!");  
  22.             writer.flush();//刷新发送数据  
  23.             System.out.println("此套接字连接的远程地址:"+s.getInetAddress().getHostAddress());  
  24.             System.out.println("此套接字绑定的本地地址:"+s.getLocalAddress().getHostAddress());  
  25.             System.out.println("此套接字绑定的本地端口:"+s.getLocalPort());  
  26.             System.out.println("此套接字连接到的远程端口:"+s.getPort());  
  27.             s.close();//关闭socket  
  28.         } catch (IOException e) {  
  29.             // TODO Auto-generated catch block  
  30.             e.printStackTrace();  
  31.         }  
  32.           
  33.     }  
  34.     public static void main(String[]args){  
  35.         DailyAdviceClient client=new DailyAdviceClient();  
  36.         client.go();  
  37.     }  
  38. }  
服务器端代码如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.io.*;  
  2. import java.net.*;  
  3. public class DailyAdviceServer {  
  4.     String[] adviceList={"Take smaller bites","One word: inappropriate",""  
  5.             + "Just for today,be honest","Tell your boss"};  
  6.     public void go(){  
  7.           
  8.         try {  
  9.             //服务器应用程序对特定端口创建出ServerSocket对象  
  10.             //这会让服务器应用程序监听来自4242端口的客户端请求  
  11.             ServerSocket serverSocket=new ServerSocket(4242);  
  12.             //服务器进入无穷循环等待客户端的请求  
  13.             while(true){  
  14.                 System.out.println("等待客户端连接...");  
  15.                 //接收到用户连接请求后,此方法会返回一个socket,以便于客户端通信  
  16.                 //此socket的端口号和serverSocket的端口号不同  
  17.                 Socket sock=serverSocket.accept();//此方法会阻塞直到有连接请求到达  
  18.                 System.out.println("此套接字连接的地址:"+sock.getInetAddress().getHostAddress());  
  19.                 System.out.println("此套接字绑定的本地地址:"+sock.getLocalAddress().getHostAddress());  
  20.                 System.out.println("此套接字绑定的本地端口:"+sock.getLocalAddress());  
  21.                 System.out.println("此套接字连接到的远程端口:"+sock.getPort());  
  22.                 //服务器向客户端发送数据  
  23.                 PrintWriter writer=new PrintWriter(sock.getOutputStream());  
  24.                 String adviceString=getAdvice();  
  25.                 writer.println(adviceString);  
  26.                 writer.flush();  
  27.                 System.out.println(adviceString);  
  28.                 //服务器接收客户端发送的数据  
  29.                 InputStreamReader streamReader=new InputStreamReader(sock.getInputStream());  
  30.                 BufferedReader reader=new BufferedReader(streamReader);  
  31.                 String adviceStringREC=reader.readLine();  
  32.                 System.out.println("REC: "+adviceStringREC);              
  33.   
  34.             }  
  35.         } catch (IOException e) {  
  36.             // TODO Auto-generated catch block  
  37.             e.printStackTrace();  
  38.         }  
  39.           
  40.     }  
  41.     public String getAdvice(){  
  42.         int random=(int)(Math.random()*adviceList.length);  
  43.         return adviceList[random];  
  44.           
  45.     }  
  46.     public static void main(String []args){  
  47.         DailyAdviceServer server=new DailyAdviceServer();  
  48.         server.go();  
  49.     }  
  50. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值