1.服务器端
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* Socket通信的服务器程序
*/
public class MyServer implements Runnable {
ServerSocket server=null;
Socket clientSocket;
boolean flag=true;
Thread connenThread; //向客户端发送信息的线程
BufferedReader sin; //输入流对象
DataOutputStream sout; //输出流对象
public static void main(String[] args) {
MyServer MS=new MyServer();
MS.serverStart();
}
public void serverStart() {
try{
server=new ServerSocket(8080); //建立监听服务
System.out.println("端口号:"+server.getLocalPort());
while(flag){
clientSocket=server.accept();
System.out.println("连接已经建立");
InputStream is=clientSocket.getInputStream();
sin=new BufferedReader(new InputStreamReader(is));
OutputStream os=clientSocket.getOutputStream();
sout=new DataOutputStream(os);
connenThread=new Thread(this);
connenThread.start(); // 启动线程,向客户端发送信息
String aLine;
while((aLine=sin.readLine())!=null){ //从客户端读入信息
System.out.println(aLine);
if(aLine.equals("bye")){
flag=false;
connenThread.interrupt(); // 线程中断
break;
}
}
sout.close(); // 关闭流
os.close();
sin.close();
is.close();
clientSocket.close(); //关闭Socket连接
System.exit(0); // 程序运行结束
}
} catch(Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
try{
int ch;
while((ch=System.in.read())!=-1){
sout.write((byte)ch); //从键盘接收字符并向客户端发送
if(ch=='\n')
sout.flush(); //将缓冲区内容向客户端输入
}
} catch(Exception e){
e.printStackTrace();
}
}
}
public void finalize(){ //析构方法
try{
server.close(); //停止ServerSocket服务
} catch(IOException e){
e.printStackTrace();
}
}
}
2.客户端
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* Socket通信的客户端程序
*/
public class MyClient implements Runnable {
Socket clientSocket;
boolean flag=true; //标记是否结束
Thread connenThread; //用于向服务器端发送信息
BufferedReader cin;
DataOutputStream cout;
public static void main(String[] args) {
new MyClient().clientStart();
}
public void clientStart() {
try {
clientSocket=new Socket("localhost",8080); //连接服务器端,使用本机
System.out.println("已建立连接");
while(flag){
InputStream is=clientSocket.getInputStream(); //获取流对象
cin=new BufferedReader(new InputStreamReader(is));
OutputStream os=clientSocket.getOutputStream();
cout=new DataOutputStream(os);
connenThread=new Thread(this);
connenThread.start(); //启动线程,向服务器端发送信息
String aLine;
while((aLine=cin.readLine())!=null){ //接收服务器端的信息
System.out.println(aLine);
if(aLine.equals("bye")){
flag=false;
connenThread.interrupt();
break;
}
}
cout.close();
os.close();
cin.close();
is.close();
clientSocket.close(); //关闭Socket连接
System.exit(0);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
try{
int ch; //从键盘接收字符并向服务器发送
while((ch=System.in.read())!=-1){
cout.write((byte)ch);
if(ch=='\n'){
cout.flush(); //将缓冲区内容向输入流发送
}
}
} catch(Exception e){
e.printStackTrace();
}
}
}
}