Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1182349
  • 博文数量: 103
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 965
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-29 09:58
个人简介

兴趣是坚持一件事永不衰竭的动力

文章分类

全部博文(103)

文章存档

2020年(6)

2019年(19)

2018年(9)

2016年(23)

2015年(43)

2013年(3)

我的朋友

分类: Java

2015-11-17 23:41:21

package com.ddChat.Test;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 这个类的业务逻辑说明如下: 
 
1.         这个类通过继承Thread类来实现线程的功能,也就是说,在其中的run方法里,定义了该线程启动后要执行的业务动作。 
 
2.         这个类提供了两种类型的重载函数。在参数类型为Socket的构造函数里, 通过参数,初始化了本类里的Socket对象,同时实例化了两类IO对象。在此基础上,通过 
start方法,启动定义在run方法内的本线程的业务逻辑。 
 
3.         在定义线程主体动作的run方法里,通过一个for(;;)类型的循环,根据IO句柄,读取从Socket信道上传输过来的客户端发送的通讯信息。如果得到的信息为“byebye” 
,则表明本次通讯结束,退出for循环。 
 
4.         catch从句将处理在try语句里遇到的IO错误等异常,而在finally从句里,将在通讯结束后关闭客户端的Socket句柄。 
 
上述的线程主体代码将会在ThreadServer类里被调用。


 * @author Administrator
 *
 */
class ServerThreadCode extends Thread
{
private Socket clientSocket;// 客户端的socket
// IO句柄
private BufferedReader sin;
private PrintWriter sout;
// 默认的构造函数
public ServerThreadCode()
{
}
public ServerThreadCode(Socket s) throws IOException
{
clientSocket = s;
// 初始化sin和sout的句柄
sin = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())), true);
// 开启线程
start();
}
// 线程执行的主体函数
public void run()
{
try
{
// 用循环来监听通讯内容
for (;;)
{
String str = sin.readLine();
// 如果接收到的是byebye,退出本次通讯
if (str.equals("byebye"))
{
break;
}
System.out.println("In Server reveived the info: " + str);
sout.println(str);
}
System.out.println("closing the server socket!");
} catch (IOException e)
{
e.printStackTrace();
} finally
{
System.out.println("close the Server socket and the io.");
try
{
clientSocket.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
阅读(581) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~