A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 浅一蓝 中级黑马   /  2014-3-12 15:35  /  1843 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 上官睿鹏 于 2014-3-12 16:53 编辑

这应该是黑马基础测试题里面的吧?我记得之前做过~客户端:
  1. import java.io.DataInputStream;
  2. import java.io.DataOutputStream;
  3. import java.io.IOException;
  4. import java.net.Socket;
  5. import java.util.Scanner;

  6. public class Client {
  7.        public static void main(String[] args) {
  8.               launchClient();
  9.        }

  10.        private static void launchClient() {
  11.              Socket s = null;
  12.              DataOutputStream dos = null;
  13.              DataInputStream dis = null;
  14.              Scanner sc = null;
  15.                
  16.       try {
  17.            while(true) {
  18.                      s = new Socket("127.0.0.1", 9999); //创建请求指定服务器的Socket对象
  19.                      dos = new DataOutputStream(s.getOutputStream()); //创建数据输出流
  20.                                 
  21.                      System.out.println("请输入:");
  22.                      sc = new Scanner(System.in);
  23.                      String str = sc.next();   //得到键盘输入的数据
  24.                     dos.writeUTF(str);    //将数据写入
  25.                                 
  26.                    dis = new DataInputStream(s.getInputStream());//创建输入流
  27.                    System.out.println("反转之后:" + dis.readUTF()); //接受并打印经服务器反转之后的字符串
  28.              }
  29.        } catch (IOException e) {
  30.                   e.printStackTrace();
  31.        } finally {
  32.                   try {
  33.                         dos.close();
  34.                   } catch (IOException e) {
  35.                         e.printStackTrace();
  36.                   }
  37.                         
  38.                  sc.close();
  39.                         
  40.                 try {
  41.                         s.close();
  42.                 } catch (IOException e) {
  43.                         e.printStackTrace();
  44.                       }
  45.                }
  46.          }
  47. }
复制代码


服务器端:
  1. import java.io.DataInputStream;
  2. import java.io.DataOutputStream;
  3. import java.io.IOException;
  4. import java.net.ServerSocket;
  5. import java.net.Socket;

  6. public class Server {
  7.         public static void main(String[] args) {
  8.                 launchServer();
  9.         }

  10.         private static void launchServer() {
  11.                 ServerSocket server = null;
  12.                 Socket s = null;
  13.                 DataInputStream dis = null;
  14.                 DataOutputStream dos = null;
  15.                 while(true) {
  16.                         try {
  17.                                 server = new ServerSocket(9999);     //创建绑定端口9999的ServerSocket对象
  18.                                 
  19.                                 System.out.println("服务器已启动!");
  20.                                 
  21.                                 s = server.accept();              //接收客户端请求,得到Socket
  22.                                 dis = new DataInputStream(s.getInputStream()); //创建数据输入流
  23.                                 String m = dis.readUTF();         //读取客户端发送的数据并返回一个String类型的对象
  24.                                 
  25.                                 StringBuffer sb = new StringBuffer(m);   //将String类型转换成StringBuffer类型便已反转
  26.                                 m = sb.reverse().toString();                        //将从客服端接受的字符串反转
  27.                                 
  28.                                 dos = new DataOutputStream(s.getOutputStream()); //穿件数据输出流
  29.                                 dos.writeUTF(m);       //将反转之后的字符串写入内存让客户端读取
  30.                                 
  31.                         } catch (IOException e) {
  32.                                 e.printStackTrace();
  33.                         } finally {
  34.                                 try {
  35.                                         dis.close();
  36.                                         s.close();
  37.                                         server.close();
  38.                                 } catch (IOException e) {
  39.                                         e.printStackTrace();
  40.                                 }
  41.                         }
  42.                         
  43.                 }
  44.         }
  45. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
客户端
import java.io.*;
import java.net.*;
class  TransClient{
        public static void main(String[] args) throws Exception{
                Socket s = new Socket("192.168.1.100",10005);
               
                //定义读取键盘数据的流对象
                BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
               
                //定义目的,将数据写入到socket输出流,发给服务端
        BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

                //定义一个socket读取流,读取服务端返回的大写信息
                BufferedReader bufIn =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));

                String line = null;
                while((line=bufr.readLine())!=null){
                        if("over".equals(line))
                                break;
                        bufOut.write(line);
                        bufOut.newLine();
                        bufOut.flush();

                        String str = bufIn.readLine();
                        System.out.println("Server:"+str);
                }
                bufr.close();
                s.close();
        }       
}
回复 使用道具 举报
服务端
class  TransServer{
        public static void main(String[] args) throws Exception{
                ServerSocket ss = new ServerSocket(10005);
                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip+".....connected");

                //读取socket读取流中的数据
                BufferedReader bufIn =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
               
                //目的,socket输出流,将大写数据写入到socket输出流,并发送给客户端
                BufferedWriter bufOut =
                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
               
                String line = null;
                while((line=bufIn.readLine())!=null){
                        System.out.println(line);
                        bufOut.write(line.toUpperCase());
                        bufOut.newLine();
                        bufOut.flush();
                }
                s.close();
                ss.close();
        }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
谢谢米娜
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马