
正文
java的发布信息的代码 java的发布信息的代码是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java网络编程,客户端和服务端相互发送信息,可是我写的双方都没读到对方发送的信息,代码如下
这个地方有问题,第一,你必须写入newLine,要不会造成阻塞;第二,你必须先flush后才能读服务器;第三,你从控制台输入应该有个结束标志,要不你在while里面把bw关闭了,你还怎么循环
客户端这个地方重写一下,
while(true) {
temp=br.readLine();
if(temp.equals("over")){
break;
}
bw.write(temp);
bw.newLine();//如果没有,使用readLine则会造成莫名等待
bw.flush();
}
不一定改全了,你先试试这些改动,如有问题再找
相关问答
Q1: java编写一个登陆和注册信息的源代码,最简单的就可以,不需要数据库的那种
你这个不用数据库真的是有点难搞
我写了个用集合存储的,你看看,能否帮上你
java.util.ListString list = new ArrayListString();
list.add("qq=123");//存储的时候用(用户名=密码)的形式
list.add("ww=456");
String username = "qq";
String password = "123";
for (int i = 0; i list.size(); i++) {
String num = username +"="+password;
if(num.equals(list.get(i))){
System.out.println("登录成功");
break;
}
}
Q2: TCP/IP协议 怎么用JAVA发送和接收二进制数据 要具体实例
1.TCP/IP协议要求信息必须在块(chunk)中发送和接收java的发布信息的代码,而块的长度必须是8位的倍数java的发布信息的代码,因此,java的发布信息的代码我们可以认为TCP/IP协议中传输的信息是字节序列。如何发送和解析信息需要一定的应用程序协议。
2.信息编码java的发布信息的代码:
首先是Java里对基本整型的处理,发送时,要注意:1)每种数据类型的字节个数;2)这些字节的发送顺序是怎样的?(little-endian还是
big-endian);3)所传输的数值是有符号的(signed)还是无符号的(unsigned)。具体编码时采用位操作(移位和屏蔽)就可以了。
具体在Java里,可以采用DataOutputStream类和ByteArrayOutputStream来实现。恢复时可以采用
DataInputStream类和ByteArrayInputStream类。
其次,字符串和文本,在一组符号与一组整数之间的映射称为编码字符集(coded character
set)。发送者与接收者必须在符号与整数的映射方式上达成共识,才能使用文本信息进行通信,最简单的方法就是定义一个标准字符集。具体编码时采用
String的getBytes()方法。
最后,位操作。如果设置一个特定的设为1,先设置好掩码(mask),之后用或操作;要清空特定一位,用与操作。
3.成帧与解析
成帧(framing)技术解决了接收端如何定位消息的首位位置的问题。
如果接收者试图从套接字中读取比消息本身更多的字节,将可能发生以下两种情况之一:如果信道中没有其他消息,接收者将阻塞等待,同时无法处理接收
到的消息;如果发送者也在等待接收端的响应消息,则会形成死锁(dealock);另一方面,如果信道中还有其他消息,则接收者会将后面消息的一部分甚至
全部读到第一条消息中去,这将产生一些协议错误。因此,在使用TCP套接字时,成帧就是一个非常重要的考虑因素。
有两个技术:
1.基于定界符(Delimiter-based):消息的结束由一个唯一的标记(unique
marker)指出,即发送者在传输完数据后显式添加的一个特殊字节序列。这个特殊标记不能在传输的数据中出现。幸运的是,填充(stuffing)技术
能够对消息中出现的定界符进行修改,从而使接收者不将其识别为定界符。在接收者扫描定界符时,还能识别出修改过的数据,并在输出消息中对其进行还原,从而
使其与原始消息一致。
2.显式长度(Explicit length):在变长字段或消息前附加一个固定大小的字段,用来指示该字段或消息中包含了多少字节。这种方法要确定消息长度的上限,以确定保存这个长度需要的字节数。
接口:
Java代码 import java.io.IOException; import java.io.OutputStream; public interface Framer { void frameMsg(byte [] message,OutputStream out) throws IOException; byte [] nextMsg() throws IOException; }
定界符的方式:
Java代码 import java.io.ByteArrayOutputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class DelimFramer implements Framer { private InputStream in;//data source; private static final byte DELIMTER=(byte)'\n';//message delimiter public DelimFramer(InputStream in){ this.in=in; } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { //ensure that the message dose not contain the delimiter for(byte b:message){ if(b==DELIMTER) throw new IOException("Message contains delimiter"); } out.write(message); out.write(DELIMTER); out.flush(); } @Override public byte[] nextMsg() throws IOException { ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream(); int nextByte; while((nextByte=in.read())!=DELIMTER){ if(nextByte==-1){//end of stream? if(messageBuffer.size()==0){ return null; }else{ throw new EOFException("Non-empty message without delimiter"); } } messageBuffer.write(nextByte); } return messageBuffer.toByteArray(); } }
显式长度方法:
Java代码 import java.io.DataInputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class LengthFramer implements Framer { public static final int MAXMESSAGELENGTH=65535; public static final int BYTEMASK=0xff; public static final int SHOTMASK=0xffff; public static final int BYTESHIFT=8; private DataInputStream in;// wrapper for data I/O public LengthFramer(InputStream in) throws IOException{ this.in=new DataInputStream(in); } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { if(message.lengthMAXMESSAGELENGTH){ throw new IOException("message too long"); } //write length prefix out.write((message.lengthBYTEMASK)BYTEMASK); out.write(message.lengthBYTEMASK); //write message out.write(message); out.flush(); } @Override public byte[] nextMsg() throws IOException { int length; try{ length=in.readUnsignedShort(); }catch(EOFException e){ //no (or 1 byte) message; return null; } //0=length=65535; byte [] msg=new byte[length]; in.readFully(msg);//if exception,it's a framing error; return msg; } }
Q3: java写的系统如何发布到网上供人使用
可以用tomcat服务器发布java的发布信息的代码,就像你自己用localhost访问一样java的发布信息的代码,别人访问是需要加上你的IP地址然后加上项目名之类的,组成url进行访问,这样的问题是你的ip暴露了,你可以在tomcat中配置一下
在Tomcat下面配置域名(如java的发布信息的代码:www.***.com)的时候,同时又不希望客户通过我们网站的IP或者域名访问到Tomcat默认的ROOT,配制方法如下:
1、打开Tomcat安装目录下的/conf/server.xml文件
2、在server.xml中将原有的Host name=“localhost“ appBase=“webapps“ ……修改为Host name=“您要配置的域名“ appBase=“webapps“……
3、在/conf/Catalina目录下建立目录“您要配置的域名的名称”,然后建立ROOT.xml文件,其格式和/conf/localhost目录下的ROOT.xml一致,但是内容如下:
?xml version='1.0' encoding='utf-8'?
Context displayName="Welcome to 56World!" docBase="D:/workplace/inbuilding" path=""
/Context
其中docBase中的内容就是你希望的打开您的域名(www.***.com) 的时候映射到的目录和默认的网页(如:index.jsp)
4、启动Tomcat服务器,就可以直接敲入域名访问你要访问的地址了。
这个配置方法也是我查询的,具体没有试过,你可以试一下,希望可以帮到你
Q4: java实现微信发送消息
netjava的发布信息的代码的java的发布信息的代码我有 java的还没看呢 给你说说原理 通过开发者id 或者关注者列表 然后通过用户openid(用户唯一标示)向用户发送客服消息 java的发布信息的代码他这个通道是走的客服消息 java的发布信息的代码,前提是必须关注者主动向公众号发过消息 时限为24h
Q5: 在java写一个方法在jsp里实现xml文件信息代码怎么写,例如:把xml里的属性现实到jsp页面上 ,急·····
弯弯眼~ 这和你后台无关~ 单纯的读xml
用jquery 的ajax 框架可以轻松完成~ contentType是xml url是xml 的地址
返回的function(data){
用$(data).filter("webSite").each(function(){
如果是属性$(this).attr("");
如果是节点$(this).find("").text();
});
}
关于java的发布信息的代码和java的发布信息的代码是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







