简单的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();
}