看别人的文章觉得咋恁别扭,不是我想的那种,搞了几天,终于有点成就感,散点分,同时高手再指点指点。1、receiveServer.javaimport java.io.*;
import java.net.*;
import java.util.*;
public class receiveServer
{
final int RECEIVE_PORT=9090; //该服务器的端口号
public receiveServer()
{
ListenThread listen=new ListenThread();
listen.start();
}
public static void main(String args[])
{
new receiveServer();
}
class ListenThread extends Thread //*** 本类<异步>完成对服务器端口的侦听
{
ServerSocket rServer=null; //ServerSocket的实例
Socket request=null; //用户请求的套接字
Thread buildThread=null; //*** Thread?
public ListenThread()
{
try
{
rServer = new ServerSocket(RECEIVE_PORT); //初始化ServerSocket
System.out.println("Listen Thread is ready! Listen Port: " + RECEIVE_PORT);
//this.start(); //*** 放到类外面控制更灵活
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
public void run()
{
try
{
while (true)
{
request = rServer.accept(); ////等待用户请求并接收客户机连接请求
buildThread = new buildSocketThread(request); //生成buildSocketThread的实例
buildThread.start(); //启动serverThread线程
}
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
} class buildSocketThread extends Thread //*** 本类完成与客户端请求建立一个socket连接,并接收客户端的指令
{
Socket clientRequest; //用户连接的通信套接字
BufferedReader input;
PrintWriter output;
public buildSocketThread(Socket s)
{
System.out.println("one connected"); //*** 输出接收事件,要不然服务器老是象死了一样没反应!!
//
this.clientRequest=s; //接收receiveServer传来的套接字
InputStreamReader reader;
OutputStreamWriter writer;
try
{
reader=new InputStreamReader(clientRequest.getInputStream());//初始化输入、输出流
writer=new OutputStreamWriter(clientRequest.getOutputStream());
input=new BufferedReader(reader);
output=new PrintWriter(writer,true);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
output.println("Welcome to the server!"); //客户机连接欢迎词
output.println("Now is: "+new java.util.Date()+" "+ "Port:"+clientRequest.getLocalPort());
output.println("What can I do for you?");
}
public void run()
{
String command=null; //用户指令
String str=null;
boolean done=false;
while(!done)
{
try
{
str=input.readLine().trim(); //接收客户机信息
if(str=="") //*** 防止客户端socket断开,下面执行空指针
;
else
{
System.out.println("received message: " + str); //就没有执行到这句,难道没收到客户端的信息?
output.println("server response: " + str); //为什么客户端收不到信息!!!?
output.flush();
}
}
catch(IOException e){System.out.println(e.getMessage());}
}
try
{
clientRequest.close(); //关闭套接字
}
catch(IOException e){System.out.println(e.getMessage());}
command=null;
} //void run
} //buildSocketThread
}
import java.net.*;
import java.util.*;
public class receiveServer
{
final int RECEIVE_PORT=9090; //该服务器的端口号
public receiveServer()
{
ListenThread listen=new ListenThread();
listen.start();
}
public static void main(String args[])
{
new receiveServer();
}
class ListenThread extends Thread //*** 本类<异步>完成对服务器端口的侦听
{
ServerSocket rServer=null; //ServerSocket的实例
Socket request=null; //用户请求的套接字
Thread buildThread=null; //*** Thread?
public ListenThread()
{
try
{
rServer = new ServerSocket(RECEIVE_PORT); //初始化ServerSocket
System.out.println("Listen Thread is ready! Listen Port: " + RECEIVE_PORT);
//this.start(); //*** 放到类外面控制更灵活
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
public void run()
{
try
{
while (true)
{
request = rServer.accept(); ////等待用户请求并接收客户机连接请求
buildThread = new buildSocketThread(request); //生成buildSocketThread的实例
buildThread.start(); //启动serverThread线程
}
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
} class buildSocketThread extends Thread //*** 本类完成与客户端请求建立一个socket连接,并接收客户端的指令
{
Socket clientRequest; //用户连接的通信套接字
BufferedReader input;
PrintWriter output;
public buildSocketThread(Socket s)
{
System.out.println("one connected"); //*** 输出接收事件,要不然服务器老是象死了一样没反应!!
//
this.clientRequest=s; //接收receiveServer传来的套接字
InputStreamReader reader;
OutputStreamWriter writer;
try
{
reader=new InputStreamReader(clientRequest.getInputStream());//初始化输入、输出流
writer=new OutputStreamWriter(clientRequest.getOutputStream());
input=new BufferedReader(reader);
output=new PrintWriter(writer,true);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
output.println("Welcome to the server!"); //客户机连接欢迎词
output.println("Now is: "+new java.util.Date()+" "+ "Port:"+clientRequest.getLocalPort());
output.println("What can I do for you?");
}
public void run()
{
String command=null; //用户指令
String str=null;
boolean done=false;
while(!done)
{
try
{
str=input.readLine().trim(); //接收客户机信息
if(str=="") //*** 防止客户端socket断开,下面执行空指针
;
else
{
System.out.println("received message: " + str); //就没有执行到这句,难道没收到客户端的信息?
output.println("server response: " + str); //为什么客户端收不到信息!!!?
output.flush();
}
}
catch(IOException e){System.out.println(e.getMessage());}
}
try
{
clientRequest.close(); //关闭套接字
}
catch(IOException e){System.out.println(e.getMessage());}
command=null;
} //void run
} //buildSocketThread
}
import java.net.*;
import java.io.*;public class Untitled1
{
Socket cliSck;
BufferedReader input; //*** 定义全局socket输入输出流,便于检测是否有数据过来
PrintWriter output;
boolean CheckReceive; //*** 定义是否检测socket接收数据
Thread checkRecv; //*** 检测socket线程实例 BufferedReader line; public Untitled1()
{
try
{
cliSck=new Socket("192.168.0.7",9090);
input=new BufferedReader(new InputStreamReader(cliSck.getInputStream()));
output=new PrintWriter(cliSck.getOutputStream());
System.out.println("启动socket数据检测...");
checkRecv=new CheckRecvThread(); //*** 启动检测socket接收数据线程
CheckReceive=true;
checkRecv.start();
System.out.println("启动客户端指令输入...");
System.out.println("客户端帮助命令: help ");
BufferedReader line=new BufferedReader(new InputStreamReader(System.in)); //*** 接收客户端指令
String str=null;
str=line.readLine().trim().toUpperCase();
boolean done=false;
while(!done)//
{
if(str.equals("QUIT"))
{
done=true;
//
System.out.println("Bye!Bye!");
line.close();
output.close();
input.close();
cliSck.close();
}
else if(str.equals("HELP"))
{
System.out.println("目前支持的命令有:");
System.out.println("quit:");
System.out.println(" close this program!");
}
else //非本程序命令,向服务器端发送消息
{
System.out.println("send message:" + str);
output.println(str); //给服务器发送一条消息,显示服务器回应信息在run中
output.flush();
}
str=line.readLine().trim().toUpperCase(); //要放在if外 并大写转换
}
}
catch(UnknownHostException U){}
catch(IOException I){}
}
public static void main(String argus[])
{
new Untitled1();
} class CheckRecvThread extends Thread //*** Socket接收数据监测
{
public void run()
{
try
{
while(CheckReceive)
{
String recv=null;
recv=input.readLine().trim();
if(recv.equals(""))
;
else
System.out.println(recv);
//
}
}
catch(IOException i){}
}
}
}