首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

简单的C/S聊天程序-请高手指教,该怎么解决

2012-01-10 
简单的C/S聊天程序--请高手指教importjava.net.*importjava.io.*publicclassSimpleCilent{publicstaticv

简单的C/S聊天程序--请高手指教
import   java.net.*;
import   java.io.*;

public   class     SimpleCilent
{
public   static   void   main(String[]   args)  
{

Socket   cilent   =   null;
try
{
cilent   =   new   Socket( "192.168.0.14 ",8000);

if   (cilent   !=null   )
{

InputStream   s1   =   cilent.getInputStream();
OutputStream   s2   =   cilent.getOutputStream();

BufferedReader   input   =   new   BufferedReader(new   InputStreamReader(s1));
BufferedWriter   output   =   new   BufferedWriter(new   OutputStreamWriter(s2));

PrintWriter   print   =   new   PrintWriter(output);



BufferedReader   inputLine   =   new   BufferedReader(new   InputStreamReader(System.in));



while   (true)
{
System.out.println( "please   enter   content: ");
String   s   =   inputLine.readLine();

print.println(s);
print.flush();

if   (s.equals( "quit "))
{
break;
}
else
{
String   i_line   =   input.readLine();
System.out.println(i_line);
}
}

}

}
catch(Exception   e)
{
e.printStackTrace();
}

finally
{
try
{
if   (cilent   !=null   )
{
cilent.close();

}

}
catch(Exception   e1)
{
e1.printStackTrace();
}

}



}
}


import   java.net.*;
import   java.io.*;
public   class     SingleServer
{
public   static   void   main(String[]   args)  
{
ServerSocket   server   =   null;

int   singleNumber;

try
{
server   =   new   ServerSocket(8000);

Socket   form   =   server.accept();//此方法实现数据传输(客户端套接字)


if   (form   !=   null)
{

System.out.println( "start   .... "+form);

InputStream   s1   =   form.getInputStream();
OutputStream   s2   =   form.getOutputStream();

BufferedReader   input   =   new   BufferedReader(new   InputStreamReader(s1));

BufferedWriter   output   =   new   BufferedWriter(new   OutputStreamWriter(s2));


PrintWriter   print   =   new   PrintWriter(output);


while   (true)
{
String   s   =   input.readLine();
System.out.println( "来自客户端消息------- "+s);

if   (s.equals( "quit "))
{
break;
}
print.println( "服务器收到的数据----- "+s);

print.flush();
}
}
}
catch(Exception   e)
{
e.printStackTrace();
}

finally
{
try
{
if   (server   !=null   )
{
server.close();
System.out.println( "服务端关闭 ");


}

}
catch(Exception   e1)
{
e1.printStackTrace();
}

}


}
}


我应该怎么修改这个程序:来达到以下目的
一个多线程服务端用来计算圆面积,从客户端接受半径输入然后将计算结果返回给客户端

[解决办法]
曾经想过做,不过后来没有做成
[解决办法]
不会多线程,单线程倒时挺好改的。
[解决办法]
import java.net.*;
import java.io.*;
public class Server
{
private ServerSocket server;
private Socket you;
public Server()
{
try
{
server = new ServerSocket(9001);
System.out.println( "服务器运行中,监听端口:9001...... ");
while(true)
{
you = server.accept();
if(you != null)
System.out.println( "有客户连接,启动服务线程...... ");
new Thread(new receive(you)).start();
System.out.println( "处理完成,继续监听...... ");
}
}catch(Exception e){System.out.println( "服务器监听出错! ");}
}

public static void main(String args[])
{
new Server();
}
}

class receive implements Runnable
{
DataInputStream din;
DataOutputStream dout;
Socket you;
String str;
int lens;
double area;
public receive(Socket you)
{
this.you = you;
}
public void run()
{
try
{
din = new DataInputStream(you.getInputStream());
dout = new DataOutputStream(you.getOutputStream());
while(true)
{
if((str = din.readUTF()).equals( "exit "))
break;
lens = din.readInt();
area = 3.14 *(lens*lens);
dout.writeDouble(area);
}
dout.close();
din.close();
you.close();
}catch(Exception e){}
}
}
[解决办法]
1.客户端要验证输入的合法性(不难,自己写写).
2.服务器端就多一个线程:
.......server..........
while (true)
{
String s = input.readLine();
System.out.println( "来自客户端消息------- "+s);

if (s.equals( "quit "))
{
break;
}
new Thread(){
try{
int r=Integer.valueOf(s).intValue();
print.println( "半径: "+s);
long area=3.14*r^2;
print.println( "面积: "+area);
}catch(Exception e){}
}.start();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}

热点排行