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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package it.cast.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
*服务端接受从键盘上输入的数据
*为什么服务端接受不到信息呢?
*/
public class Server2 {
        public static void main(String[] args) throws IOException {
                // 创建ServerSocket对象
                ServerSocket ss = new ServerSocket(10001);
                Socket s = ss.accept();
                while(true){
                        // 获取客户端套接字对象
                        // 获取输入流
                        InputStream in = s.getInputStream();
                        byte[] bys = new byte[1024];
                        int len = in.read(bys);
                        System.out.println(new String(bys, 0, len));
                }
        }
}

public class Client2 {
        public static void main(String[] args) throws IOException {
                // 创建客户端套接字
                Socket s = new Socket("192.168.1.145", 10001);
                // 从键盘录入数据
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                while ((line = br.readLine()) != null) {
                        if ("over".equals(line)) {
                                break;
                        }
                        // 与服务端建立连接,并获取输出流
                        OutputStream out = s.getOutputStream();
                        // 发送数据
                        out.write(line.getBytes());
                }

        }
}

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

2 个回复

倒序浏览
TCP 协议:如果, Socket客户端 向服务器端发送数据。ServerSocket(已开启) 已经通过端口号监视到了,客户端发送的数据,流通道开启。如果,数据已经发送完了,你还不禁止,让通道关闭。JVM ,认为你的数据还在发送中。数据将一直保存在缓冲区中。服务器的写入流将无法读取导数据。造成了,客户端向服务器点,发送通道的阻塞。 解决的办法,有2种: 一种是发送完了直接把客户端关闭(close)不建议使用。  还有一种是暂时禁止,客户端的发送,
shutdownOutput() 。让服务器端的,输入流接收到数据。应该就解决,这个问题了!


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 唐长智 于 2013-3-5 15:07 编辑

这个例子里面你有两个没注意到的地方,所以导致程序运行不畅,我用红色的标示出来。
package it.cast.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
*服务端接受从键盘上输入的数据
*为什么服务端接受不到信息呢?
*/
public class Server2 {
        public static void main(String[] args) throws IOException {
                // 创建ServerSocket对象
                ServerSocket ss = new ServerSocket(10001);
                Socket s = ss.accept();
                while(true){
                        // 获取客户端套接字对象
                        // 获取输入流
                        InputStream in = s.getInputStream();
                        byte[] bys = new byte[1024];
                        int len = in.read(bys);
                        System.out.println(new String(bys, 0, len));
                }
        }
}

public class Client2 {
        public static void main(String[] args) throws IOException {
                // 创建客户端套接字
                Socket s = new Socket("192.168.1.145", 10001);
                // 从键盘录入数据
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                while ((line = br.readLine()) != null) {
                        if ("over".equals(line)) {
                                break;
                        }
                        // 与服务端建立连接,并获取输出流
                        OutputStream out = s.getOutputStream();
                        // 发送数据
                        out.write(line.getBytes());
               //在写出之后进行刷新操作,保证数据的写出去了
                        out.flush();

                }

        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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