Day09=java网络编程和多次c/s通信交换数据遇到的问题(无法继续)

计算机在互联网中以IP地址标识

  • 内网ip (大多设置为192.168)
  • 公网ip 运营商提供一条线路连过来
  • 本机ip:127.0.0.1 localhost 可以在完全不联网的情况下使用

端口号,传递给确定的进程

端口号是计算机中的应用程序的标识,0-65535之间,应用程序可以占1个也可以占多个。应尽量避免使用0-1024之间的,已经被知名的软件或windows操作系统占用。

通信协议

交流的标准。对数据的

  • 传输速率
  • 传入接口
  • 步骤控制
  • 出错控制
    等,指定的标准,通信双方必须同时遵守才能完成数据交换。
  • IP 因特网互联协议

ServerSocket

每连接一个客户端,服务器就会得到一个新的socket对象,用于跟客户端进行通信。

ServerSocket(int port);//创建一个基于TCP/IP协议的服务器,并绑定指定端口号
//常用方法
Socket accept();//等待客户端连接,此方法会导致线程阻塞直到新的客户端连接成功,return socket对象后线程再继续执行
void close();//释放占用的端口号,关闭服务器

Socket是两台计算机之间通信的端点,名:套接字

输入输出流

  • OutputStream getOutputStream(); 返回指向通信另一端点的输出流
  • InputStream get…返回指向通信另一端点的输入流
  • void close();关闭套接字。
    客户端和服务器的输入输出流是相反的。注意获取顺序
    发送:
  1. OutputStream os = socket.getOutputStream();
  2. PrintStream ps = new PrintStream(os);
  3. ps.println(“服务器你好”);
    接收:
  4. InputStream is = socket.getInputStream();
  5. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  6. String text = br.readLine();
    注意必须一个是发送状态一个是接收状态才行

多线程服务器

while(true){
	//接收客户端
	Socket socket = server.accept();
	//创建线程
	new Thread(){
                @Override
                public void run(){
                    try{
                        InputStream is = socket.getInputStream();
                        OutputStream os = socket.getOutputStream();
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
            }.start();

}

socket常用方法

  • 获取输入输出流(上节)
  • 获取状态
  • 一定要close();
  • 连接到服务器 connect();

将快递柜程序改成c/s时遇到的问题:

  1. 怎么让双方多次互相通信?比如服务器给2行话,客户端回一行,服务器再给1行,再回一行这样连续下去
    client和server都新建一个内部类专门负责发送消息。在client和server的run()方法内,让这个new sendMsgThread.start();,然后再开OutputStream。利用os.write()和byte[]来发送和接收字节流,如果接收len=-1则停止。
  2. 尝试过用socket.shutdownOutputStream()关闭输出流,这样能继续一次,之后输出流就再也打不开了
  3. 用br.readLine()循环读取输入时,会停住不继续了
while(line!=null&&line.length()>0){
    System.out.println(line);
    if(line=="bye") break label;
    line = br.readLine();//为什么停在这里不继续了
}
  1. 所以互相通信时如果服务器打开了输出流,那么服务器还能否接收到,就是输入输出流是否会冲突?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值