}
@Override
public void run() {
while(true){
try {
//从socket中得到输出流对象
OutputStream os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
os.write(line.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3:建立主客户端类
package com.lcq.network;
/**
*
* 类名:MainClient
* 功能:建立主客户端类,接受服务器端的信息并显示,与服务器端进行交互
* 时间:
* 作者:lcq
* 版本:
*
*/
import java.net.Socket;
public class MainClient {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 4000);
new ClientInputThread(socket).start();
new ClientOutputThread(socket).start();
}
}
4:建立主客户端的两个线程(包括向服务器端输入和输出)
package com.lcq.network;
/**
*
* 类名:ClientInputThread
* 功能:建立主客户端的输入线程类,接收服务器端的信息后打印出来
* 时间:
* 作者:lcq
* 版本:
*
*/
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ClientInputThread extends Thread{
private Socket socket;
public ClientInputThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
while(true){
try {
//建立输入流
InputStream is = socket.getInputStream();
byte[] by = new byte[1024];
//将输入流里的字节读到字节数组里,并返回读的字节数
int length = is.read(by);
//将字节数组里的length个字节转换为字符串
String str = new String(by,0,length);
//打印出字符串
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.lcq.network;
/**
*
* 类名:ClientOutputThread
* 功能:建立主客户端的输出线程类, 向服务器端传送信息
* 时间:
* 作者:lcq
* 版本:
*
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class ClientOutputThread extends Thread{
Socket socket = new Socket();
public ClientOutputThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
while(true){
try {
OutputStream os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
os.write(line.getBytes());
} catch (IO