Android学习指南
来源:互联网 发布:2015手机淘宝最新版 编辑:程序博客网 时间:2024/05/18 00:13
RSS
Archive for the ‘0.Java基础讲座’ Category
第二十二讲:多线程(一)
05Jan
本讲内容:多线程
第二十一讲:网络编程(一)
05Jan
本讲内容: socket 只会装傻的”智能“机器人
套接字(socket)是代表计算机之间网络连接的对象。要进行计算机间的网络通讯,建立TCP连接,那么就需要Socket编程,Java提供了ServerSocket类和Socket类,可以利用他们很方便的实现,计算机间的网络通讯。
因为Java把数据的传输已经抽象成InputStream和OutputStream的输入输出流,那么对网络通讯来说,其实就是利用ServerSocket类和Socket类建立起来网络连接,进行字节流或者字符流的输入输出操作。
下面我们还是通过一个例子来学习Socket编程:只会装傻的”智能“机器人
直接上代码,服务器端 TalkServer.java :
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TalkServer {public static void main(String[] args) throws IOException {// 创建一个ServerSocketServerSocket server = new ServerSocket(8080);// 准备接受客户连接,如果有客户连接到,则创建一个socket对象,如果没有客户连接到,那么该程序会停在本行一直等待,像是在睡眠或者假死,这种行为叫做“阻塞”,阻塞是网络通信中的术语,就是你等别人响应,如果必须等到,等不到就一直等,就是阻塞,等不到也继续向前走的当然就是非阻塞。Socket socket = server.accept();// 从socket中获取一个输入对象,以便接受从网络上来的数据BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据,如果想让服务器端和客户端自由对话的话可以用此对象//BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in));// 从socket中获取一个PrintWriter socketOutput = new PrintWriter(socket.getOutputStream(),true);//定义一些变量String input;// 一直执行,直到客户端表示要断开while(true){//从客户端获取用户输入的字符串input = socketInput.readLine();//发送到屏幕System.out.print("客户:");System.out.println(input);//准备好回复语句String reply= reply(input);//发送到客户端socketOutput.println(reply);//发送到屏幕System.out.print("小瑶瑶:");System.out.println(reply);//客户如果输入的是再见则退出循环if(input.equals("再见")){break;}}//关闭释放资源socketInput.close();socketOutput.close();socket.close();}//回复方法private static String reply(String input) {String output=replys[number%7];if(number%7==5){output = output+" "+input;}number++;return output;}//回复方法用到的一些变量static int number =0;static String[] replys = new String[7];static{replys[0]= "你说的啥,我听不见?";replys[1]= "声音再大点行不?";replys[2]= "声音再大点一点点行不?";replys[3]= "还是听不清……";replys[4]= "看来是网络的问题,你要不说慢点?";replys[5]= "听到了!听到了!你说的是:";replys[6]= "完了,又听不清了……";}}
客户端代码 TalkClient.java :
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TalkClient {public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1",8080);// 从socket中获取一个输入对象,以便接受从网络上来的数据BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in));// 从socket中获取一个PrintWriter socketOutput = new PrintWriter(socket.getOutputStream(),true);// 定义一些变量String input;// 一直执行while(true){//从键盘获取数据,通过socket对象发送出去input = keyboardInput.readLine();socketOutput.println(input);//接收从socket中获取的服务器端发回的回应信息,并发送到屏幕上input = socketInput.readLine();System.out.println(input);}}}
编译两个文件,先运行TalkServer,开始接收客户端的连接,然后运行客户端,在客户端上打字,服务器端会有回应,运行截图如下,这里上一个服务器端的截图: