黑马程序员技术交流社区

标题: 网络编程问题 [打印本页]

作者: 李红飞    时间: 2012-5-25 22:01
标题: 网络编程问题
import java.io.*;
import java.net.*;

class TcpClient2
{
        public static void main(String[] args)throws Exception
        {
                Socket s = new Socket("192.168.1.254",10004);               
                OutputStream out = s.getOutputStream();
                out.write("服务端,你好".getBytes());               
                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];                                    
                int len = in.read(buf);         
                System.out.println(new String(buf,0,len));
                s.close();
        }
}
class TcpServer2
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10004);
                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip+"....connected");
                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));
                OutputStream out = s.getOutputStream();
                Thread.sleep(10000);
                out.write("你也好".getBytes());  
                s.close();
                ss.close();
        }
}视频讲解上说 用阻塞式方法,流之间传输不会冲突,是什么含义呀?
而且我感觉此题 输入流,输出流之间的流向很混乱?请大家帮忙解释一下!!
作者: 付左军    时间: 2012-5-25 22:16
阻塞式,服务端开启接受客户端发送的数据,如果此时客户端没有数据传过来,服务端会等待数据的传送,
作者: 张晨    时间: 2012-5-25 22:28
服务端      客户端
发送         接收
接受         发送
...            ...

就是这个套路吧

P.S.:即使服务端连续发送两个文件,为了区分不同文件他也必须接受一次,而客户端也必须发送一次信息,否则会出现两个文件被合并的悲剧
作者: 付信榕    时间: 2012-5-27 13:31
希望对你有帮助

01.PNG (32.11 KB, 下载次数: 27)

01.PNG

作者: 马超    时间: 2012-5-27 13:43
本帖最后由 马超 于 2012-5-27 13:46 编辑

我当时在理解的时候也挺困难的  后来恍然大悟:
之所以是阻塞式的方法,从客户端和服务端的角度来讲,服务端开始服务,随时接受来自客户端的消息,不来就等待,来了就做回复。   而输入输出呢,就是看谁在调用了,Input 进来  Output出去  谁调用 就指的是谁。

两端操作.gif (6.5 KB, 下载次数: 26)

两端操作.gif

作者: 郭宁    时间: 2012-5-27 14:02
话说我是客户端、楼主是服务器(你提供的服务就是求我给你数的平方值,并反馈给我)

为人民服务你是不是的一直等着我给你传值啊?总不能我给你传的时候你不在岗吧?所以你得一直盯着窗口等我给你传张纸条(我想楼主主要的疑惑不在这里)

如果你不用阻塞,你闭着眼伸手一抓又一抓,抓到了给我返回,抓不到也给我返回一个值

我这边会不会蒙了?我可是VIP客户啊亲~






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