Java TCP socket通信,如何实现发送十六进制值,并在数据接收窗口中显示这些数据对应的字符串,非常感谢!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java TCP socket通信,如何实现发送十六进制值,并在数据接收窗口中显示这些数据对应的字符串,非常感谢!相关的知识,希望对你有一定的参考价值。
一个Java TCP socket通信的代码,实现了server与client相互发送字符串功能。
请问大家:应如何实现发送十六进制数据呢?并实现在数据接收提示窗口中 显示 所发送的十六进制数据对应的字符串。。
本人的思路:在接收端,将收到的十六进制数据转化成字符串,再输出。
根据网上的例子修改代码,但是老是实现不了,以下贴的代码是实现接收字符串信息,请大家帮忙,在以下代码的基础上修改一下,实现以上功能。非常感谢~!
//服务器端接收信息的部分代码如下:
public void run()
DatagramPacket pack = new DatagramPacket(buffer,buffer.length);
while(!stop)
try
server.receive(pack);
if(server == tcpServer.server)///////////////会话栏中提示服务器收到的信息
parent.append("服务器[" + pack.getAddress().getHostAddress()+":"
+pack.getPort()+"]收到信息: " +
new String(pack.getData(),0,pack.getLength()) );
else
parent.append("服务器收到信息: " +
new String(pack.getData(),0,pack.getLength()) );
catch (Exception e)
if(!stop)
parent.error(e.getMessage(),"Error acception connection");
stop=true;
continue;
//end of while
//end of run
兜里没分了,不好意思不能给大家悬赏,非常感谢您的help...
运行服务器,c1,c2就可以了,c1与c2可进行通信。
Client.java
import java.net.*;
public class Client
static byte num=1;
private int portNum;
public Client(int portnum)
this.portNum=portnum;
System.out.println("您是第"+num+"位客服端");
num++;
public void sentMessage(String me)
//都是向服务器发信息端口号1999
try
DatagramSocket ds=new DatagramSocket();
DatagramPacket dp=new DatagramPacket(me.getBytes(),me.length(),InetAddress.getByName("127.0.0.1"),1999);
ds.send(dp);
ds.close();
catch(Exception e)
e.printStackTrace();
public String receiveMessage()
String str="";
try
DatagramSocket ds=new DatagramSocket(this.portNum);//表示哦自己的接收端口号是1999
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,1024);
ds.receive(dp);
str=new String(dp.getData(),0,dp.getLength());
ds.close();
catch(Exception e)
e.printStackTrace();
return str;
c1.java
import java.util.*;
public class c1 implements Runnable
Client cl;
boolean goon=true;
Scanner sc=new Scanner(System.in);
public c1()
cl=new Client(2000);
System.out.println("这里是2000客户端\n你可以发送信息。请输入要发送的信息。out退出");
new Thread(this).start();
while(this.goon==true)
say();
if(goon==false)
System.exit(0);
public static void main(String[] args)
new c1();
public void say()
String mess=sc.nextLine();
System.out.println("是否发送y/n");
String key=sc.nextLine();
if(key.equals("y"))
System.out.println("信息信息发送中……");
try
cl.sentMessage(mess);
catch(Exception e)
e.printStackTrace();
else if(key.equals("out"))
goon=false;
public void run()
while(this.goon==true)
String sst="";
try
sst=cl.receiveMessage();
catch(Exception e)
e.printStackTrace();
if(sst.length()>0)
System.out.println(sst);
try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();
System.out.println("程序结束!");
c2.java
import java.util.*;
public class c2 implements Runnable
Client cl;
boolean goon=true;
Scanner sc=new Scanner(System.in);
public c2()
cl=new Client(2001);
System.out.println("这里是2001客户端\n你可以发送信息。请输入要发送的信息。out退出");
new Thread(this).start();
while(goon==true)
say();
if(goon==false)
System.exit(0);
public static void main(String[] args)
new c2();
public void say()
String mess=sc.nextLine();
System.out.println("是否发送y/n");
String key=sc.nextLine();
if(key.equals("y"))
System.out.println("信息信息发送中……");
try
cl.sentMessage(mess);
catch(Exception e)
e.printStackTrace();
else if(key.equals("out"))
this.goon=false;
public void run()
while(this.goon==true)
String sst="";
try
sst=cl.receiveMessage();
catch(Exception e)
e.printStackTrace();
if(sst.length()>0)
System.out.println(sst);
try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();
System.out.println("聊天关闭!");
Server.java
import java.net.*;
import java.util.*;
public class Server implements Runnable
private String message;
boolean work=true;
byte tm=10;
String[] clomessage="信息:正在断开网络连接.",".",".\n","信息:设置保存中……","","","完成\n","信息:欢迎下次使用\n","信息:完成\n","Goodbye!";
public Server()
new Thread(this).start();
System.out.println("本程序为服务端Server");
Scanner sc=new Scanner(System.in);
System.out.println("输入命令out关闭服务器");
String clo=sc.nextLine();
if(clo.equals("out"))
System.out.println("正在关闭服务器……");
setwork(false);
System.exit(0);
public static void main(String[] args)
new Server();
public void setwork(boolean bo)
this.work=bo;
public void setMessage(String str)
this.message=str;
public String getMessage()
return this.message;
public void sentMessage()
String mes=this.getMessage();
try
DatagramSocket ds=new DatagramSocket();
DatagramPacket dp=new DatagramPacket(mes.getBytes(),mes.length(),InetAddress.getByName("127.0.0.1"),2000);
DatagramPacket dp2=new DatagramPacket(mes.getBytes(),mes.length(),InetAddress.getByName("127.0.0.1"),2001);
ds.send(dp);
ds.send(dp2);
ds.close();
System.out.println("信息发送至:127.0.0.1:2000 & 127.0.0.1:2001");
this.setMessage("");
catch(Exception e)
e.printStackTrace();
public void receiveMessage() throws Exception
try
DatagramSocket ds=new DatagramSocket(1999);//表示哦自己的接收端口号是1999
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,1024);
ds.receive(dp);
String str=new String(dp.getData(),0,dp.getLength());
if(str.length()>0)
this.setMessage(str);
System.out.println("信息:Server从"+dp.getAddress().getHostAddress()+"主机(端口号:"+dp.getPort()+")收到信息:"+this.getMessage());
ds.close();
catch(Exception e)
e.printStackTrace();
public void run()
while(tm>0)
if(work==false)
tm--;
System.out.print(clomessage[9-tm]);
try
receiveMessage();//时刻接受信息
catch(Exception e)
e.printStackTrace();
if(this.getMessage().length()>0)//如果接收到信息则发送信息
try
sentMessage();
catch(Exception e)
e.printStackTrace();
try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();
呵呵,请指教啊! 参考技术A 短小精悍,必对!
1,首先将你的16进制的数据,转化成byte[],然后发送
2,获得数据,然后将byte[]的东西转化成String,int等你可以看清的进行显示本回答被提问者采纳 参考技术B 你这哪是TCP通信哦,应该是UDP通信吧 参考技术C 我想到的两种方法哟,一种发送端把数据转换成16进制的字符串,接收端直接接收显示;另一种发送端就发数字,接收端转化成16进制数显示;这难吗,跟你发字符串一起的哟 参考技术D 你发送的数据到底是什么呢,数字?字符串?中文?
还是什么都有?
以上是关于Java TCP socket通信,如何实现发送十六进制值,并在数据接收窗口中显示这些数据对应的字符串,非常感谢!的主要内容,如果未能解决你的问题,请参考以下文章