Android学习指南

来源:互联网 发布:2015手机淘宝最新版 编辑:程序博客网 时间:2024/05/18 00:13

 
RSS
 

Archive for the ‘0.Java基础讲座’ Category

第二十二讲:多线程(一)

05Jan

lesson22

本讲内容:多线程

 
1 Comment

Posted in 0.Java基础讲座

 

第二十一讲:网络编程(一)

05Jan

lesson21

本讲内容: 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,开始接收客户端的连接,然后运行客户端,在客户端上打字,服务器端会有回应,运行截图如下,这里上一个服务器端的截图:

image

 

 

原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 段奶不吃奶粉怎么办 婴儿不肯吃米粉怎么办 小孩皮肤不白怎么办 七个月宝宝挑食怎么办 宝宝不喝米粉怎么办 宝宝一岁半体检缺钙怎么办 1岁宝宝不喝药怎么办 孩子不愿喝奶粉怎么办 小孩断奶后不喝奶粉怎么办 宝宝吃土了怎么办 四个奶不够吃怎么办 4个月回奶了怎么办啊 四个月宝宝上火怎么办 宝宝吃母乳瘦小怎么办 母乳宝宝拉稀水怎么办 4个月后奶水不够怎么办 22天宝宝拉肚子怎么办 48天奶水不够怎么办 婴儿不肯吃母乳怎么办 满月后奶水少怎么办 晚上奶水不够吃怎么办 晚上胆小怕鬼怎么办 母乳一次不够量怎么办 到晚上奶水不足怎么办 感觉晚上奶水不够怎么办 宝宝转奶便秘怎么办 宝宝转奶过敏怎么办 婴儿不停的吃奶怎么办 新生儿吃的太多怎么办 奶水不够宝宝吃不饱怎么办 母乳总是往外流怎么办 奶水少宝宝吃不饱怎么办 七个月奶水不够怎么办 剖腹产奶不够吃怎么办 小孩不肯吃牛奶怎么办 梦见被鬼抓住怎么办 7个月奶不够吃怎么办 做梦被鬼上身怎么办 婴儿新环境哭闹怎么办 婴儿换地方哭闹怎么办 骨结痂被吸收怎么办