marila设计的有问题,不觉得吗,且问题太多 public class Server{ static Socket socketlist[] = new Socket[1000]; public Server( int socketport ) throws IOException { listenForConnecting( socketport ); } //listenForConnecting方法用于侦听连接
private void listenForConnecting( int socketport ) { ServerSocket serversocket = new ServerSocket( socketport ); try{ //关键是侦听的部分,用一个while循环来实现 while (true) { Socket socket = serversocket.accept(); if (socket==null) break; try{ new ConnectionForClient( this, socket );} catch(IOException e){ dataOut.close();} } } finally{ dataOut.close();} } //SendMessageCenter方法用于发送信息给客户端 public void SendMessageCenter (String message,Socket socket) throws IOException{ //建立输出流,将信息发送给客户端 //你会发现一个用于储存客户端socket信息的数组socketlist[],该数组在客户 //端连接或断开连接时更新数据,这里不详细讨论这个问题 for(int k=0;k<socketlist.length();k++) { try{ DataOutputStream dataOut = new DataOutputStream( socketlist[k].getOutputStream() ); dataOut.writeUTF( message ); } catch(IOException e){ dataOut.close();} finally{ dataOut.close();} } //其他用于判断信息的过程.... .... } } 然后建立ConnectionForClient类,这个类完成与客户端的连接,并与之进行通信: public class ConnectionForClient extends Thread{ Server server; Socket socket; //所有准备工作在构造器中完成 public ConnectionForClient( Server server, Socket socket ) { this.server = server; this.socket = socket; DataOutputStream dataOut = new DataOutputStream( socket.getOutputStream() ); //首先建立DataInputStream类用于接收客户端发送的信息 DataInputStream dataIn = new DataInputStream( socket.getInputStream() ); start(); } public void run() {
dataOut.writeUTF( "Welcome!" );
try{ //类似于服务器的侦听连接工作,同样侦听客户端发送的信息 while (true) {
String message = dataIn.readUTF(); if(message=="over") { dataOut.writeUTF( "bye!" ); break; } //一旦接收到客户端发送的信息,就将详细发送者和发送的信息传给Server类的信息发送中心 server.SendMessageCenter( message , this.socket ); } } catch(IOException e){ socket.close();} finally{ socket.close();} } static public void main( String args[] ) throws Exception { //程序开始执行 int socketport = 8765; new Server( socketport ); } } ___________________________________________________对你客户端的改进:public class Client extends Thread { DataInputStream dataIn; DataOutputStream dataOut; Socket socket; //Client类的构造器 public Client( String hostAdress, int socketport ){ // 建立socket对象 socket = new Socket( hostAdress, socketport ); dataIn = new DataInputStream( socket.getInputStream() ); dataOut = new DataOutputStream( socket.getOutputStream() );
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //开始后台线程用于监听服务器端传送的信息 start(); } public void run(){ try{
while (true) { System.out.println("input over to complet!");
有点没有礼貌!对不起!
我也是刚学没有多久,上面你写的这些代码刚好是我做过的作业,
我还有使用数据报通信的(也就是UDP),SOCKET是TCP的.现在正在学习使用
SERVLET 来做聊天室,要求能够进行语音通信.如果楼主有空的话,相互交流一下.
public class Server{ static Socket socketlist[] = new Socket[1000];
public Server( int socketport ) throws IOException { listenForConnecting( socketport ); } //listenForConnecting方法用于侦听连接
private void listenForConnecting( int socketport ) { ServerSocket serversocket = new ServerSocket( socketport ); try{
//关键是侦听的部分,用一个while循环来实现
while (true)
{
Socket socket = serversocket.accept();
if (socket==null) break;
try{ new ConnectionForClient( this, socket );}
catch(IOException e){ dataOut.close();} }
} finally{ dataOut.close();}
}
//SendMessageCenter方法用于发送信息给客户端
public void SendMessageCenter (String message,Socket socket) throws IOException{ //建立输出流,将信息发送给客户端
//你会发现一个用于储存客户端socket信息的数组socketlist[],该数组在客户
//端连接或断开连接时更新数据,这里不详细讨论这个问题 for(int k=0;k<socketlist.length();k++)
{ try{
DataOutputStream dataOut = new DataOutputStream( socketlist[k].getOutputStream() );
dataOut.writeUTF( message );
}
catch(IOException e){ dataOut.close();}
finally{ dataOut.close();}
}
//其他用于判断信息的过程.... .... }
}
然后建立ConnectionForClient类,这个类完成与客户端的连接,并与之进行通信: public class ConnectionForClient extends Thread{ Server server;
Socket socket; //所有准备工作在构造器中完成 public ConnectionForClient( Server server, Socket socket ) { this.server = server;
this.socket = socket;
DataOutputStream dataOut = new DataOutputStream( socket.getOutputStream() );
//首先建立DataInputStream类用于接收客户端发送的信息
DataInputStream dataIn = new DataInputStream( socket.getInputStream() ); start(); }
public void run() {
dataOut.writeUTF( "Welcome!" );
try{ //类似于服务器的侦听连接工作,同样侦听客户端发送的信息
while (true) {
String message = dataIn.readUTF();
if(message=="over")
{
dataOut.writeUTF( "bye!" );
break;
} //一旦接收到客户端发送的信息,就将详细发送者和发送的信息传给Server类的信息发送中心
server.SendMessageCenter( message , this.socket ); }
}
catch(IOException e){ socket.close();}
finally{ socket.close();} } static public void main( String args[] ) throws Exception { //程序开始执行 int socketport = 8765; new Server( socketport ); } } ___________________________________________________对你客户端的改进:public class Client extends Thread { DataInputStream dataIn;
DataOutputStream dataOut;
Socket socket; //Client类的构造器
public Client( String hostAdress, int socketport ){ // 建立socket对象
socket = new Socket( hostAdress, socketport ); dataIn = new DataInputStream( socket.getInputStream() );
dataOut = new DataOutputStream( socket.getOutputStream() );
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //开始后台线程用于监听服务器端传送的信息
start();
} public void run(){
try{
while (true) {
System.out.println("input over to complet!");
String words = in.readLine(); sendMessage(words);
//等待服务器发送信息并显示出来
String message = dataIn.readUTF();
if(message=="bye!") break; System.out.print ( message + "\n" );
}
}
catch(IOException e){ socket.close(); }
finally{ socket.close();} } //sendMessage方法将用户输入的信息发送给服务器 private void sendMessage( String message ){ dataOut.writeUTF( message ); } //程序开始执行
public static void main(String args[]){ int socketport = 8765; String hostAddress = "211.211.211.211" //其实可以通过参数指定IP和端口,这里简化这个过程 new Client( hostAdress , socketport ); }
}