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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 楞个里格朗 中级黑马   /  2013-8-29 08:27  /  2086 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基础测试的压轴题,老毕的视频也有,不过自己家没有网络,搞不定。
切入正题:使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

评分

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

查看全部评分

5 个回复

正序浏览
楼主 你的问题如果解决了!



请把您的问题的"未解决"更改为"已解决"!



谢谢合作!


回复 使用道具 举报
//服务端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
* 创建一个多线程服务端
*
* 接收客户端发送过来的字符串
*
* 打印客户端的地址, 端口号, 发送过来的字符串
*
* 把字符串反转, 再发回去
*/
@SuppressWarnings("resource")
public class Server {

        public static void main(String[] args) throws Exception {
                ServerSocket serverSocket = new ServerSocket(12345);
                while (true) {
                        final Socket socket = serverSocket.accept();
                        new Thread(){
                                public void run() {
                                        try {
                                                String ip = socket.getInetAddress().getHostAddress();
                                                int port = socket.getPort();
                                               
                                                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                                PrintStream ps = new PrintStream(socket.getOutputStream());
                                               
                                                String s = br.readLine();                                                        // 读取到的一行字符串
                                                System.out.println(ip + ":" + port + ": " + s);                // 打印
                                                ps.println(new StringBuilder(s).reverse());                        // 反转, 发回去
                                               
                                                socket.close();
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }.start();
                }
        }

}
//客户端


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

/*
* 连接服务端
*
* 从键盘接收一个字符串
*
* 发送到服务端
*
* 接收服务端发回的字符串, 打印
*/
public class Client {

        public static void main(String[] args) throws Exception {
                Socket socket = new Socket("192.168.3.100", 12345);
               
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintStream ps = new PrintStream(socket.getOutputStream());
                Scanner scanner = new Scanner(System.in);
               
                System.out.println("请输入一个字符串:");
                ps.println(scanner.nextLine());                                // 从键盘读取一行字符串, 发送
                System.out.println(br.readLine());                        // 从服务端读取一行字符串, 打印
               
                socket.close();
                scanner.close();
        }

}



评分

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

查看全部评分

回复 使用道具 举报
没网络也能完成啊,~~~~楼主不懂变通啊~
在建立客户端时可以这样写啊:Socket client=new Socket(InetAddress.getLocalHost(),10000);,要不拿自己主机名字getByName("")下。
import java.io.*;
import java.net.*;

public class TcpClient
{
        public static void main(String[]args)throws Exception
        {
                Socket client=new Socket(InetAddress.getLocalHost(),10000);
                BufferedReader bufr=
                                new BufferedReader(new InputStreamReader(System.in));
                //BufferedWriter bufwOut=
                //                new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                PrintWriter pwOut=new PrintWriter(client.getOutputStream(),true);
                BufferedReader bufrIn=
                                new BufferedReader(new InputStreamReader(client.getInputStream()));
                String line=null;
                while((line=bufr.readLine())!=null)
                {
                        if("over".equals(line))
                                break;
                        //bufwOut.write(line);
                        //bufwOut.newLine();
                        //bufwOut.flush();
                        pwOut.println(line);
                        String transLine=bufrIn.readLine();
                        System.out.println(transLine);
                }
                bufr.close();
                client.close();               
        }
}
客户端和服务端都是public 的注意。
public class TcpServer
{
        public static void main(String[]args)throws Exception
        {
                ServerSocket server = new ServerSocket(10000);
                Socket s=server.accept();
                BufferedReader bufrIn=
                                new BufferedReader(new InputStreamReader(s.getInputStream()));
                //BufferedWriter bufwOut=
                                //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true);
                String ip=s.getInetAddress().getHostAddress();
                System.out.println(ip+"......connected");
                String line=null;
                while((line=bufrIn.readLine())!=null)
                {
                        //bufwOut.write(line.toUpperCase());
                        //bufwOut.newLine();
                        //bufwOut.flush();
                        pwOut.println(reverse(line));
                }
                s.close();
                server.close();
        }
        //定义个反转功能就ok了
        public static String reverse(String  s)
        {
                return new StringBuffer(s).reverse().toString();
        }
}

评分

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

查看全部评分

回复 使用道具 举报
确定是反转
回复 使用道具 举报
是反转,还是返回大写数字?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马