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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚做了个简单的TCP
先说下需求吧:
//通过客户端键盘录入单词,并发送到服务端。//服务端在控制台打印后,将该单词转成大写再发回客户端。
检查了好多遍了 不知哪里出错 】
导致客户端输入的不能在服务端转成大写还给客户端
public class ClientDemo {

        public static void main(String[] args) throws Exception, IOException {
//                创建Socket对象  给服务端的ip 和  端口号
                Socket socket = new Socket("10.1.31.66", 10123);
//                获取输入流
                InputStream in = socket.getInputStream();
                byte[] buffer = new byte[1024];
                int a = in.read(buffer);
                System.out.println(new String(buffer,0,a));
//                获取输出流
                OutputStream out = socket.getOutputStream();
                InputStream i  = System.in;
                byte[] buff = new byte[1024];
                int b = i.read(buff);
                out.write(buff, 0, b);
        }
}



public class ServerDemo {

        public static void main(String[] args) throws Exception {
//                创建TCP的端口并监听
                ServerSocket server = new ServerSocket(10123);
//                获得客服对象
                Socket socket1 = server.accept();
//                获得客服对象ip
                String ip = server.getInetAddress().getHostAddress();
                System.out.println(ip + "-------ing");
//                获得对象的输入流
                while(true) {
                        InputStream in = socket1.getInputStream();
                        byte[]buffer = new byte[1024];
                        int b = in.read(buffer);
                        System.out.println(new String(buffer,0,b));
        //                获得对象的输出流
                        OutputStream out = socket1.getOutputStream();
                        byte[]buff = (new String(buffer,0,b).toUpperCase()).getBytes();
                        out.write(buffer);
                }
               

        }

}


4 个回复

正序浏览
public class ClientDemo {

        public static void main(String[] args) throws Exception, IOException {
//                创建Socket对象  给服务端的ip 和  端口号
                 Socket socket = new Socket("10.1.31.66", 10123);
//                获取输入流
                 InputStream in = socket.getInputStream();
                 byte[] buffer = new byte[1024];
                 int a = in.read(buffer);                  //你这里顺序不对 read是阻塞式方法,在这直接阻塞等这从服务端接收数据,就往下不运行了,先向服务端发送在接收
                 System.out.println(new String(buffer,0,a));
//                获取输出流
                 OutputStream out = socket.getOutputStream();
                 InputStream i  = System.in;
                 byte[] buff = new byte[1024];
                 int b = i.read(buff);
                 out.write(buff, 0, b);
         }
}



public class ServerDemo {

        public static void main(String[] args) throws Exception {
//                创建TCP的端口并监听
                 ServerSocket server = new ServerSocket(10123);
//                获得客服对象
                 Socket socket1 = server.accept();
//                获得客服对象ip
                 String ip = server.getInetAddress().getHostAddress();
                 System.out.println(ip + "-------ing");
//                获得对象的输入流
                 while(true) {
                         InputStream in = socket1.getInputStream();
                         byte[]buffer = new byte[1024];
                         int b = in.read(buffer);
                         System.out.println(new String(buffer,0,b));
         //                获得对象的输出流
                         OutputStream out = socket1.getOutputStream();
                         byte[]buff = (new String(buffer,0,b).toUpperCase()).getBytes();
                         out.write(buffer);           //这里应该是buff
                 }
                //你这客户端只发送一次就结束了,而你这服务端却一直在这从这流接收数据,会报错的, 建议再仔细看看毕老师的视频

        }

}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
确定一下,服务器打开了吗?你的客户端连接的10.1.31.66是你本机的IP地址吗
回复 使用道具 举报
踩单车的幸福 发表于 2012-5-18 19:45
初步猜想是这样,socket通讯它是阻塞式方式,如果服务器端没有接受到特殊字符的结束标记,它会默认为还在写 ...

我在客服端那边System。in输入同样的没反应
回复 使用道具 举报
初步猜想是这样,socket通讯它是阻塞式方式,如果服务器端没有接受到特殊字符的结束标记,它会默认为还在写入,那么这时候它一直在等待,而客户端那边也同样在等待返回数据,这样两端等待造成了一个假死的现象。毕导的视频里应该提到过,建议仔细看一下。谢谢、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马