java socket发送中文乱码_java Socket接收数据乱码问题「建议收藏」

java socket发送中文乱码_java Socket接收数据乱码问题「建议收藏」));}问题:1.此出输出的数据与我发送的数据不一致2.如果我用strSql=String.valueOf(buffer,0,nDataLen-1);则输出的是方块3.同样我用另外一个程序测试端口6789的数据,打印出来的也是方块,不知道是什么原因,请各位老大帮帮忙分析一下原因,三叩首了!!![/B]测试程序:importjava.nio.channels.ServerSocketCh…

大家好,又见面了,我是你们的朋友全栈君。

));

}

问题:

1.此出输出的数据与我发送的数据不一致

2.如果我用strSql = String.valueOf(buffer,0,nDataLen – 1 );则输出的是方块

3.同样我用另外一个程序测试端口6789的数据,打印出来的也是方块,不知道是什么原因,请各位老大帮帮忙分析一下原因,三叩首了!!!

[/B]

测试程序:

import java.nio.channels.ServerSocketChannel;

import java.nio.channels.SocketChannel;

import java.net.ServerSocket;

import java.net.InetSocketAddress;

import java.nio.channels.Selector;

import java.nio.channels.SelectionKey;

import java.io.IOException;

import java.util.Iterator;

import java.nio.ByteBuffer;

import java.util.ArrayList;

import java.nio.charset.*;

import java.nio.*;

public class ChatServer {

private int port = 6789;

private Selector selector;

private ServerSocketChannel ssc;

private ServerSocket server;

private InetSocketAddress address;

private ArrayList connectKey=new ArrayList();

public ChatServer(){

//initServer

try{

ssc=ServerSocketChannel.open();

server=ssc.socket();

address = new InetSocketAddress(port);

server.bind(address);

selector=Selector.open();

ssc.configureBlocking(false);

ssc.register(selector,SelectionKey.OP_ACCEPT);

System.out.println(“Listening the port 6789…&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

}catch(IOException ex){

ex.printStackTrace();

System.exit(-1);

}

}

public void startServer() throws IOException{

while(true){

int i=selector.select();

//System.out.print(i);

Iterator keys = selector.selectedKeys().iterator();

while(keys.hasNext()){

SelectionKey key = (SelectionKey)keys.next();

keys.remove();

try{

if(key.isAcceptable()){

ServerSocketChannel ssc=(ServerSocketChannel)key.channel();

SocketChannel channel = ssc.accept();//return null if there’s no request

System.out.println(channel+” has accepted&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

channel.configureBlocking(false);

SelectionKey clientKey=channel.register(selector,SelectionKey.OP_READ);

}//else

if(key.isWritable()){

SocketChannel channel = (SocketChannel)key.channel();

ByteBuffer buffer = (ByteBuffer)key.attachment();

if(buffer!=null){

key.attach(null);//avoid the return twice

//check info:the login or the message

//buffer.flip();

String checkBuffer = this.decode(buffer);

System.out.println(“write:”+checkBuffer);

if(checkBuffer.equals(“LOGIN:OK&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif){

//return LOGIN:OK then add into the connectKey array!

System.out.println(“ok”+buffer);

buffer.flip();

//while(buffer.hasRemaining()&channel.write(buffer)!=-1);

channel.write(buffer);

key.interestOps(SelectionKey.OP_READ|SelectionKey.OP_WRITE);

connectKey.add(key);//add to the connectKey array

System.out.println(“here&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

}else if(checkBuffer.equals(“LOGIN:ERROR&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif){

//return LOGIN:ERROR the client should close the channel

//warning:method:key.channel();

//Returns the channel for which this key was created.

// This method will continue to return the channel even after the key is cancelled.

while(buffer.hasRemaining()&channel.write(buffer)!=-1);

key.cancel();

}else //if(checkBuffer.indexOf(“SENTO:&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif!=-1){

{

//return the message to everyone

// while(buffer.hasRemaining()&channel.write(buffer)!=-1);

System.out.println(“sento”+buffer);

buffer.flip();

channel.write(buffer);

System.out.println(“send over&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

}

}

}//else

[B]

if(key.isReadable()){

SocketChannel channel = (SocketChannel)key.channel();

ByteBuffer buffer=ByteBuffer.allocate(8192);

System.out.println(“read…&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

channel.read(buffer);

buffer.flip();

String checkBuffer = this.decode(buffer);

System.out.println(“read:”+checkBuffer);

[/B]

//while(buffer.hasRemaining()&&channel.read(buffer)!=-1);

//check the buffer

//buffer.flip();

//String checkBuffer = this.decode(buffer);

// System.out.println(“read:”+checkBuffer);

if(checkBuffer.startsWith(“LOGIN:&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif){

//get info of the user & pass then check for it,return feedback!

//the format is LOGIN:user&pass

int p1=checkBuffer.length();

int p2=checkBuffer.indexOf(“&&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

String user=checkBuffer.substring(6,p2);

String pass=checkBuffer.substring(p2+1,p1);

System.out.println(user+pass);

//todo check from the database!!!

//assume the user is legal

ByteBuffer feedback = ByteBuffer.allocate(20);

feedback=ByteBuffer.wrap(“LOGIN:OK”.getBytes());

key.interestOps(SelectionKey.OP_WRITE);

key.attach(feedback);

}else if(checkBuffer.startsWith(“SENTO:”)){

String message = checkBuffer.substring(6);

System.out.println(“sentto:”+message);

ByteBuffer buffer1 = ByteBuffer.allocate(50);

buffer1=ByteBuffer.wrap(message.getBytes());

Iterator it = connectKey.iterator();

//key.interestOps(SelectionKey.OP_WRITE);

while(it.hasNext()){

((SelectionKey)it.next()).attach(buffer1.duplicate());

}

System.out.println(“here1”);

//for(int i=0;i //connectKey.attach(buffer.duplicate());

//}

}

}

}catch(IOException ex){

key.cancel();

//System.exit(-1);

try{

key.channel().close();

}catch(IOException cex){

}

}

}

}

}

public String decode(ByteBuffer buffer){

Charset charset=null;

CharsetDecoder decoder=null;

CharBuffer charBuffer=null;

try{

charset= Charset.forName(“ISO-8859-1”);

decoder= charset.newDecoder();

charBuffer= decoder.decode(buffer);

return charBuffer.toString();

}catch(Exception ex){

ex.printStackTrace();

return “”;

}

}

public static void main(String []args){

ChatServer cs = new ChatServer();

try{

cs.startServer();

}catch(IOException ex){

ex.printStackTrace();

System.exit(-1);

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156772.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)

    android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)

    2022年2月7日
    40
  • pycharmPyCharm 2021.8.3安装激活码【永久激活】

    (pycharmPyCharm 2021.8.3安装激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~KU…

    2022年3月22日
    63
  • gis地理加权回归步骤_地理加权回归权重

    gis地理加权回归步骤_地理加权回归权重内容导读1)回归概念介绍;2)探索性回归工具(解释变量的选择)使用;3)广义线性回归工具(GLR)使用;*加更:广义线性回归工具的补充内容4)地理加权回归工具(GWR)使用+小结。说明:本节是这个学习笔记最后一部分。PART/04地理加权回归工具(GWR)使用上一节我们讲了GLR广义线性回归,它是一种全局模型,可以构造出最佳描述研究区域中整体数据关系的方程。如果这些关系在研究区域中是一致的,则GLR回归方程可以对这些关系进行很好的建模。不过,当这些关系在研

    2022年10月6日
    3
  • 微信小程序实现图片上传功能怎么弄_怎样把图片发到小程序里

    微信小程序实现图片上传功能怎么弄_怎样把图片发到小程序里前端:微信开发者工具后端:.Net服务器:阿里云这里介绍微信小程序如何实现上传图片到自己的服务器上前端代码data:{productInfo:{}},//上传图片uploadImage:function(){varthat=this;wx.chooseImage({count:1,//最多可以选择的图片总数…

    2025年8月11日
    4
  • Spring学习总结(一)入门

    一、Spring的概述1、什么是SpringSpring:SE/EE开发的一站式框架。一站式框架:有EE开发的每一层解决方案。WEB层 :SpringMVCService层 :Spring的Bean管理,Spring声明式事务DAO层 :Spring的Jdbc模板,Spring的ORM模块2、为什么学习Spring3、常用Spring的版本 &…

    2021年11月30日
    59
  • 前端HTML+CSS面试题汇总一[通俗易懂]

    前端HTML+CSS面试题汇总一[通俗易懂]目录你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?Quirks模式是什么?它和Standards模式有什么区别div+css的布局较table布局有什么优点?img的alt与title有何异同?strong与em的异同?你能描述一下渐进增强和优雅降级之间的不同吗?为什么利用多个域名来存储网…

    2022年5月31日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号