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

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

文章分类

全部博文(108)

文章存档

2021年(1)

2020年(10)

2019年(19)

2018年(9)

2016年(23)

2015年(43)

2013年(3)

我的朋友

分类: Java

2015-11-17 23:43:04

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.InetAddress;
import java.net.Socket;


/**
 *  
这个类的主要业务逻辑是: 
 
1.         在构造函数里, 通过参数类型为InetAddress类型参数和3333,初始化了本类里的Socket对象,随后实例化了两类IO对象,并通过start方法,启动定义在run方法内的本线程的业务逻辑。 
 
2.         在定义线程主体动作的run方法里,通过IO句柄,向Socket信道上传输本客户端的ID号,发送完毕后,传输”byebye”字符串,向服务器端表示本线程的通讯结束。  
3.         同样地,catch从句将处理在try语句里遇到的IO错误等异常,而在finally从句里,将在通讯结束后关闭客户端的Socket句柄。


 * @author Administrator
 *
 */
class ClientThreadCode extends Thread
{
// 客户端的socket
private Socket socket;
// 线程统计数,用来给线程编号
private static int cnt = 0;
private int clientId = cnt++;
private BufferedReader in;
private PrintWriter out;
// 构造函数
public ClientThreadCode(InetAddress addr)
{
try
{
socket = new Socket(addr, 3333);
} catch (IOException e)
{


e.printStackTrace();
}
// 实例化IO对象
try
{


in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
// 开启线程
start();
} catch (IOException e)
{


// 出现异常,关闭socket
try
{
socket.close();
} catch (IOException e2)
{
e2.printStackTrace();
}
}
}


// 线程主体方法
public void run()
{
try
{
out.println("Hello Server,My id is " + clientId);
String str = in.readLine();
System.out.println(str);
out.println("byebye");
}


catch (IOException e)
{


e.printStackTrace();
} finally
{
try
{
socket.close();
}


catch (IOException e)
{


e.printStackTrace();
}
}
}
}

阅读(1050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~