java socket为啥不阻塞

问题描述

java socket为啥不阻塞

package pack1;

import java.io.*;

import java.net.ServerSocket;i

mport java.net.Socket;

public class Servers { public static void main(String[] args) {

// TODO Auto-generated method stub

try {

ServerSocket s=new ServerSocket(8888);

while (true) {

Socket s1=s.accept();

InputStream os=s1.getInputStream();

byte [] rece=new byte["nihao".getBytes().length];

os.read(rece);

String msg=new String(rece);

System.out.println(msg);

s1.close(); } }

catch (Exception e)
{ // TODO: handle exception} }}

# 这段程序当运行时,客户端不连接,为啥还输出乱码字符呢??请明白人解释下 Socket s1=s。accept(); 不是阻塞函数吗?客户端没有连接,为啥往下执行呢

解决方案

java socket 阻塞
Java中Socket阻塞的原因
java socket getinputstream 阻塞

解决方案二:

我跑了一下你的代码 并没有出现乱码

时间: 2024-10-03 08:45:14

java socket为啥不阻塞的相关文章

java Socket编程readLine()阻塞

问题描述 //客户端classLoginClient{publicstaticvoidmain(String[]args)throwsException{Sockets=newSocket("192.168.4.121",10008);BufferedReaderbufr=newBufferedReader(newInputStreamReader(System.in));PrintWriterout=newPrintWriter(s.getOutputStream(),true);B

关于java阻塞socket和非阻塞socket的应用区别

问题描述 关于java阻塞socket和非阻塞socket的应用区别 最近在学习NIO,在学习非阻塞Socket的时候 很困惑,不知道他相对于阻塞的Socket的优势 在哪,希望大神指点一二,在线等. 解决方案 阻塞就是一直等待结果返回,非阻塞就是立即返回,等有了结果了以后,再回调,事件通知你 解决方案二: 传统的阻塞式,每个连接必须要开一个线程来处理,并且没处理完线程不能退出. 非阻塞式,由于基于反应器模式,用于事件多路分离和分派的体系结构模式,所以可以利用线程池来处理.事件来了就处理,处理完

java socket长连接中解决read阻塞的3个办法_java

解决的方法有3个 : 1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length 2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效. 复制代码 代码如下: Socket socket = new Socket(host,port); socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException 3 让发送端发送完数据后,关闭连接. 这个在Http的

JAVA socket 传送文件一直被阻塞

问题描述 我写了一个简单的JAVA socket传送文件的程序如下:客户端:System.out.println("file download starts.");File fDir = new File("./downloads");File file = new File(fDir, "abc.txt");BufferedOutputStream bufr = new BufferedOutputStream(new FileOutputSt

Java Socket聊天室编程(一)之利用socket实现聊天之消息推送_java

相关阅读:Java Socket聊天室编程(二)之利用socket实现单聊聊天室 网上已经有很多利用socket实现聊天的例子了,但是我看过很多,多多少有一些问题存在. 这里我将实现一个比较完整的聊天例子,并解释其中的逻辑. 由于socket这一块比较大,所以我将分出几篇来写一个比较完整的socket例子. 这里我们先来实现一个最简单的,服务器与客户端通讯,实现消息推送的功能. 目的:服务器与客户端建立连接,客户端可以向服务器发送消息,服务器可以向客户端推送消息. 1,使用java建立socke

Java socket字节流传输示例解析_java

本文为大家分享了Java socket字节流传输示例,供大家参考,具体内容如下 服务端server端:  package com.yuan.socket; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * Created by YUAN on 2016-09-17. */ public class TalkServer4Byte { private ServerSocket server;

java Socket实现简单在线聊天(一)

最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持续发送消息: 2.结合线程,实现多客户端连接服务端发送消息: 3.实现服务端转发客户端消息至所有客户端,同时在客户端显示: 4.把awt组件生成的窗口界面改成前端jsp或者html展示的界面,java socket实现的客户端改为前端技术实现. 这里首先实现第一步的简单功能,难点在于: 1.没有用过

java Socket实现简单在线聊天(二)

接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进行处理,从而解决之前的循环读取中造成阻塞的问题. 写线程通常有两种方法,集成Thread或者实现runnable接口,原则上是能实现runnable的情况下就不继承,因为实现接口的方式更加灵活. 客户端代码相较之前没有变化,变得是服务端,因此这里便只贴出服务端代码: package chat.chat; im

JAVA Socket超时浅析(转)

  套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条虚拟的"线缆".JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它"侦听"进入的连接:Socket,客户端用它初始一次连接.侦听套接字只能接收新的连接请求,不能接收实际的数据包.   套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的