import java.io.*;//这里使用BufferedReader,DataInputStream,DataOutputStream,IOException,InputStreamReader类
import java.net.*;//这里使用Socket类
public class TestSocketClient_bidi
{
public static final String IP = "localhost";//服务器地址
public static final int PORT = 8000;//服务器端口号
public static void main(String[] args)
{
handler();
}
private static void handler()
{
try
{
//实例化一个Socket,并指定服务器地址和端口
Socket client = new Socket(IP, PORT);//
//开启两个线程,一个负责读,一个负责写
new Thread(new ReadHandlerThread(client)).start();//新开一个读线程,调用start方法,该线程开始执行
new Thread(new WriteHandlerThread(client)).start();//新开一个写线程 ,调用start方法,该线程开始执行
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/*
*处理读操作的线程
*/
class ReadHandlerThread implements Runnable
{
private Socket client;
public ReadHandlerThread(Socket client)//构造方法
{
this.client = client;//将形参client赋给属性client
}
@Override
public void run()//实现run方法
{
DataInputStream dis = null;
try
{
while(true)
{
//读取服务器端数据
dis = new DataInputStream(client.getInputStream());//获取client端的输入流通道地址
String receive = dis.readUTF();//从包含的输入流中读取此操作需要的字节
System.out.println("服务器端返回过来的是: " + receive);//输出内容
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if(dis != null)//当输入流不为空时,
{
dis.close();//关闭输入流
}
if(client != null)//当客户端不为空时,
{
client = null;//关闭客户端
}
}
catch (Exception e)//原来是IOException
{
e.printStackTrace();
}
}
}
}
/*
* 处理写操作的线程
*/
class WriteHandlerThread implements Runnable
{
private Socket client;//
public WriteHandlerThread(Socket client)//构造方法
{
this.client = client;//将形参client赋给属性client
}
@Override
public void run()
{
DataOutputStream dos = null;//定义一个DataOutputStream对象,用来接受输出数据流
BufferedReader br = null;//定义一个BufferedReader对象,用来缓冲读取数据
try
{
while(true)
{
//取得输出流
dos = new DataOutputStream(client.getOutputStream());//获取client端的输出流通道地址
System.out.print("请输入: \t");//
//键盘录入
br = new BufferedReader(new InputStreamReader(System.in));//缓冲键盘读取的数据
String send = br.readLine();//读取一行数据
//发送数据
dos.writeUTF(send);//以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if(dos != null)
{
dos.close();
}
if(br != null)
{
br.close();
}
if(client != null)
{
client = null;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
4.Socket双向通信--客户端
最新推荐文章于 2024-08-15 09:39:21 发布