client码,如以下:

import java.io.*;
import java.net.*;
public class DailyAdviceClient {
public void go(){ try {
Socket s=new Socket("127.0.0.1",4242);//建立对server的Socket连接
//client从server读取数据
//建立连接到socket上低层输入串流的InputStreamReader
//InputStreamReader是低层和高层串流间的桥梁
//s.getInputStream()从Socket取得输入串流
InputStreamReader streamReader=new InputStreamReader(s.getInputStream());
//建立BufferedReader来读取
BufferedReader reader=new BufferedReader(streamReader);
String adviceString=reader.readLine();
System.out.println("Today you should: "+adviceString);
//client向server发送数据
//创建不带自己主动行刷新的PrintWriter对象。
//假设加入第二个參数true,则为自己主动刷新,不须要写writer.flush()这行代码
PrintWriter writer=new PrintWriter(s.getOutputStream());
writer.println("Hello,I am Client2!");
writer.flush();//刷新发送数据
System.out.println("此套接字连接的远程地址:"+s.getInetAddress().getHostAddress());
System.out.println("此套接字绑定的本地地址:"+s.getLocalAddress().getHostAddress());
System.out.println("此套接字绑定的本地端口:"+s.getLocalPort());
System.out.println("此套接字连接到的远程端口:"+s.getPort());
s.close();//关闭socket
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public static void main(String[]args){
DailyAdviceClient client=new DailyAdviceClient();
client.go();
}
}

server端代码例如以下:

import java.io.*;
import java.net.*;
public class DailyAdviceServer {
String[] adviceList={"Take smaller bites","One word: inappropriate",""
+ "Just for today,be honest","Tell your boss"};
public void go(){ try {
//服务器应用程序对特定port创建出ServerSocket对象
//这会让服务器应用程序监听来自4242port的client请求
ServerSocket serverSocket=new ServerSocket(4242);
//服务器进入无穷循环等待client的请求
while(true){
System.out.println("等待client连接...");
//接收到用户连接请求后。此方法会返回一个socket。以便于client通信
//此socket的port号和serverSocket的port号不同
Socket sock=serverSocket.accept();//此方法会堵塞直到有连接请求到达
System.out.println("此套接字连接的地址:"+sock.getInetAddress().getHostAddress());
System.out.println("此套接字绑定的本地地址:"+sock.getLocalAddress().getHostAddress());
System.out.println("此套接字绑定的本地port:"+sock.getLocalAddress());
System.out.println("此套接字连接到的远程port:"+sock.getPort());
//服务器向client发送数据
PrintWriter writer=new PrintWriter(sock.getOutputStream());
String adviceString=getAdvice();
writer.println(adviceString);
writer.flush();
System.out.println(adviceString);
//服务器接收client发送的数据
InputStreamReader streamReader=new InputStreamReader(sock.getInputStream());
BufferedReader reader=new BufferedReader(streamReader);
String adviceStringREC=reader.readLine();
System.out.println("REC: "+adviceStringREC); }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public String getAdvice(){
int random=(int)(Math.random()*adviceList.length);
return adviceList[random]; }
public static void main(String []args){
DailyAdviceServer server=new DailyAdviceServer();
server.go();
}
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

最新文章

  1. C#中Split用法
  2. sublime 编译运行C程序
  3. CocoaPods的版本升级
  4. Django基础,Day10 - template 模板引擎与路径设置
  5. blob storage第一次亲密接触
  6. 最大密集子图(01分数规划+二分+最小割)POJ3155
  7. hdu 4604 Deque
  8. JAVA 方法或者类的注释快捷键
  9. 转载Expression Tree揭秘
  10. CC_CALLBACK原理及应用
  11. 全面认识网络诊断命令功能与参数——netsh diagnostic命令
  12. Jquery 常用总结
  13. Android 点击事件,4种回调。
  14. 在Thinkphp3.2 中使用PHPMailer 发送邮件
  15. 【动态规划】XMU 1560 新ACM规则
  16. [Python笔记]第一篇:基础知识
  17. bzoj 2120 带修改莫队
  18. Davinci DM6446开发攻略——LINUX GPIO驱动源码移植
  19. 开放数据接口 API 简介与使用场景、调用方法
  20. inetd的工作流程

热门文章

  1. 间隔DP基础 POJ2955——Brackets
  2. HDU 4337 King Arthur's Knights 它输出一个哈密顿电路
  3. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug
  4. php:修改NetBeans默认字体
  5. 取证学习资料DVD
  6. Dubbo-Admin管理平台和Zookeeper注册中心的搭建(转)
  7. POJ 1905-Expanding Rods(二分法+计算几何)
  8. unity3d插入Daikon Forge GUI 中国课程-7-高级控制slider采用
  9. c#错误捕获如何定位到某一行?
  10. js多物体任意值运动