黑马程序员技术交流社区

标题: 求解 TCP问题 [打印本页]

作者: 杜光    时间: 2013-6-15 00:51
标题: 求解 TCP问题
本帖最后由 孙百鑫 于 2013-6-15 08:34 编辑
  1. /*
  2. 客户端通过键盘录入用户名
  3. 服务端对这个用户名进行效验

  4. 如果该用户存在,在服务端现实xxx,已登录
  5. 并在客户端显示xxx,欢迎光临

  6. 如果该用户存在,在服务端显示xxx,尝试登录。
  7. 并在客户端显示xxx,该用户不存在。

  8. 最多就登录三次
  9. */


  10. import java.io.*;
  11. import java.net.*;

  12. class  User
  13. {
  14.         public static void main(String[] args) throws Exception
  15.         {
  16.                 Socket s = new Socket("192.168.31.171",10008);

  17.                 BufferedReader buf =
  18.                         new BufferedReader(new InputStreamReader(System.in));

  19.                 PrintWriter pw = new PrintWriter(s.getOutputStream());

  20.                 String line = null;

  21.                 while ((line=buf.readLine())!=null)
  22.                 {
  23.                         pw.println(line);
  24.                 }

  25.                 s.shutdownOutput();
  26.                

  27.                 s.close();

  28.         }
  29. }


  30. class  Server
  31. {
  32.         public static void main(String[] args) throws Exception
  33.         {
  34.                 ServerSocket ss = new ServerSocket(10008);

  35.                 Socket s =ss.accept();

  36.                 BufferedReader bufIn =
  37.                         new BufferedReader(new InputStreamReader(s.getInputStream()));

  38.                 //PrintWriter pw = new PrintWriter();

  39.                 String line = null;

  40.                 int x = 0;

  41.                 String str = "duguang";
  42.                
  43.                 while(x<3 && (line=bufIn.readLine())!=null)
  44.                 {
  45.                         if (line.equals(str))
  46.                         {
  47.                                 System.out.println(str+"已经登录");
  48.                         }
  49.                         else
  50.                         {
  51.                                 System.out.println(line+"正在尝试登录");
  52.                                 x++;
  53.                         }
  54.                         
  55.                 }

  56.                 bufIn.close();
  57.                 //pw.close();
  58.         }
  59. }
复制代码
运行后,客户端可以输入但是,服务端好像没有判断,求解
作者: ′х.|鰉❤耔    时间: 2013-6-15 01:11
  1. public class Server
  2. {
  3.         public static void main(String args[]){
  4.                 try{
  5.                         ServerSocket server=new ServerSocket(6000);//端口号
  6.                         System.out.println("服务器已经启动,等待客户端连接中...");
  7.                         int clientnum=0;//计数器
  8.                         for(int i=0;i>=0;i++){
  9.                                 Socket socket=server.accept();
  10.                                 //DataOutputStream dop=new DataOutputStream(socket.getOutputStream());//输出信息给客户端
  11.                                 ServerThread st=new ServerThread(socket,clientnum);
  12.                                 st.start();
  13.                                 clientnum++;
  14.                                 System.out.println("第"+clientnum+"个客户端连接服务器!");
  15.                                 //if(i==5){
  16.                                 //        dop.writeUTF("关闭");
  17.                                 //        break;
  18.                                 //}
  19.                         }
  20.                         server.close();
  21.                 }catch(Exception e){e.printStackTrace();}
  22.         }
  23. }
  24. class ServerThread extends Thread
  25. {
  26.         private Socket socket;
  27.         private int clientnum;
  28.         public ServerThread(Socket socket,int num){
  29.                 this.socket=socket;
  30.                 this.clientnum=num;
  31.         }
  32.         public void run(){
  33.                 try{
  34.                         DataInputStream dip=new DataInputStream(socket.getInputStream());//输入客户端的信息
  35.                         System.out.println(dip.readUTF());//打印出客户端的信息               
  36.                         dip.close();
  37.                 }catch(Exception e){e.printStackTrace();}
  38.         }
  39. }
复制代码
  1. public class Client
  2. {
  3.         public static void main(String args[]){
  4.                 try{                               
  5.                         //String[] serverstr={"关公","周瑜","诸葛亮","项羽","西施"};
  6.                         for(int i=0;i>=0;i++){
  7.                                 Socket socket=new Socket("127.0.0.1",6000);
  8.                                 //System.out.println(serverstr[i]+":连接到服务器");
  9.                                 ClientThread ct=new ClientThread(socket);
  10.                                 ct.start();
  11.                                 ct.join(); //永久等待
  12.                                 socket.close();
  13.                         }
  14.                 }catch(Exception e){e.printStackTrace();}
  15.         }
  16. }
  17. class ClientThread extends Thread
  18. {
  19.         private Socket socket;
  20.         public ClientThread(Socket socket){
  21.                 this.socket=socket;
  22.         }
  23.         public void run(){
  24.                 try{
  25.                         DataOutputStream dop=new DataOutputStream(socket.getOutputStream());//输出信息给服务器
  26.                         Scanner sc=new Scanner(System.in);
  27.                         String str=sc.nextLine();//下一行
  28.                                 dop.writeUTF(str);
  29.                                 dop.flush();
  30.                                 dop.close();
  31.                 }catch(Exception e){e.printStackTrace();}       
  32.         }
  33. }
复制代码
这个是我自己写的无限聊天的多线程Socket,你最好是用我这样的方法来从客户端给服务器传送数据,最好别用读取一行的,因为肯能度到空格噢,你试下把你的line先去除前后的空格在和你那个字符串对比看看行不行吧~

还有我上面的代码不是粘贴复制的,是我自己写的一个Demo噢~最讨厌一些人我把代码贴出来就觉得我是从网上拷贝的。
作者: ′х.|鰉❤耔    时间: 2013-6-15 01:12
还有我写的比较简单,应该很好理解的。如果哪里写错,还请楼主指出错误。
作者: 孙百鑫    时间: 2013-6-15 07:23
不知道楼主的问题解决了嘛?如果解决的话.请改主题分类哦~~
作者: 杜光    时间: 2013-6-15 07:45
孙百鑫 发表于 2013-6-15 07:23
不知道楼主的问题解决了嘛?如果解决的话.请改主题分类哦~~

我好像帖子从昨天开始没有编辑功能了
作者: 孙百鑫    时间: 2013-6-15 08:34
杜光 发表于 2013-6-15 07:45
我好像帖子从昨天开始没有编辑功能了

那我帮您修改了:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2