服务器:

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

 

public class TCPServer {

 

/**

* @param args

* @throws IOException 

*/

public static void main(String[] args) throws IOException {

new TCPServer().go();

}

public void go(){

ServerSocket ss;

Socket s = null;

try {

ss = new ServerSocket(8888);

s = ss.accept();

} catch (IOException e) {

e.printStackTrace();

}

SendThread send = new SendThread(s);//发送消息的线程

new Thread(send).start();

RecvThread recv = new RecvThread(s);//接收消息的线程

new Thread(recv).start();

}

class SendThread implements Runnable{

private Socket s = null;

private DataOutputStream dos = null;

public SendThread(Socket s){

this.s = s;

try {

dos = new DataOutputStream(s.getOutputStream());

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void run() {

String str = ""; 

while(true){

System.out.println("input message:");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//从标准输入中读入数据

try {

str = br.readLine();

dos.writeUTF(str);//向服务器写数据

if("bye".equals(str))//判断是否结束会话

break;

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

class RecvThread implements Runnable{

private Socket s = null;

private DataInputStream dis = null;

public RecvThread(Socket s){

this.s = s;

try {

dis = new DataInputStream(s.getInputStream());//从socket中读取服务器发送过来的数据

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void run() {

String str = "";

while(true){

try {

str = dis.readUTF();//从客户端读取数据

if("bye".equals(str))

break;

System.out.println("received message:"+str);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

 
 
客户端:
 
 
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class TCPClient {
 
public static void main(String[] args) throws UnknownHostException, IOException{
new TCPClient().go();
}
public void go() {
try {
Socket s = new Socket("127.0.0.1",8888);
RecvThread recv = new RecvThread(s);
new Thread(recv).start();
SendThread send = new SendThread(s);
new Thread(send).start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
 
class RecvThread implements Runnable{
private Socket s = null;
private DataInputStream dis = null;
public RecvThread(Socket s){
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
String str = "";
while(true){
try {
str = dis.readUTF();
if("bye".equals(str))
break;
System.out.println("received message:"+str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class SendThread implements Runnable{
private Socket s;
private DataOutputStream dos;
public SendThread(Socket s){
this.s = s;
try {
dos = new DataOutputStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
String str = "";
while(true){
System.out.println("input message:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
str = br.readLine();
dos.writeUTF(str);
if("bye".equals(str))
break;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}