gpt4 book ai didi

java - 如何在同一个 Java 套接字上发送图像和文本?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:51 24 4
gpt4 key购买 nike

我是 java 的新手,有点卡在我的媒体控制项目上。我需要做的是将图像和文本发送到客户端应用程序。我找到了一些接收图像并显示它的示例代码(如下所列)。这非常有效,但我需要有一种方法可以通过同一个套接字连接发送图像和文本。

有没有办法确定它是什么类型的数据?如果它是图像,我希望它在我的程序中显示它,如果它是文本,则显示一个消息框。

我应该有两个 socket ,一个用于图像,一个用于文本吗?

不幸的是,示例代码中的变量名不是英文,这使得理解起来有点困难:

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Cliente extends JFrame {

JTextField tf;
Lienzo lienzo;
Socket con;
ObjectOutputStream salida;
ObectInputStream entrada;

public Cliente(){

super("Cliente");
Container c = getContentPane();

tf = new JTextField(10);
lienzo = new Lienzo();

c.add(lienzo);
pack();
setSize(100,100);
setVisible(true);
}

void ejecutar(){

try{

con = new Socket("127.0.0.1",5700);
salida = new ObjectOutputStream(con.getOutputStream());
salida.flush();
entrada = new ObjectInputStream(con.getInputStream());

procesar();

}
catch(IOException e){}

}

void procesar() throws IOException {

try{

while(true){
ImageIcon img = (ImageIcon) entrada.readObject();
escribir(img);
}
}catch(ClassNotFoundException e){}

}

void escribir(final ImageIcon img){

SwingUtilities.invokeLater(
new Runnable(){
public void run(){
lienzo.pinta(img);
}
}
);
}

public static void main( String args[] ){
Cliente cl = new Cliente();
cl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cl.ejecutar();
}

class Lienzo extends JPanel{

ImageIcon img = null ;

public Lienzo(){

}

public void pinta(ImageIcon img){
this.img = img;
repaint();
}

public void paintComponent(Graphics g){

super.paintComponent(g);

if(img!=null)
img.paintIcon(this,g,10,10);
}
}
}

最佳答案

如果您同时控制服务器和客户端,那么一个非常简单的方法是为您要发送的不同消息定义类,然后使用对象输出/输入流来完成繁重的工作,也就是编码。

下面是一些虚幻的伪代码:

class Message<T extends Serializable> implements Serializable {
private T payload;

public Message() {
super();
}

public Message(T data) {
super();
setPayload(data);
}

public T getPayload() {
return payload;
}

public void setPayload(T aPayload) {
payload = aPayload;
}
}

在服务器上:

ObjectOutputStream oos = new ObjectOutputStream(...);
oos.writeObject(new Message<String>("Hello World"));

在客户端:

ObjectInputStream ois = new ObjectInputStream(...);
Message<?> msg = (Message<?>) ois.readObject();
if(msg.getPayload() instanceof String) // do one thing
else if(msg.getPayload() instanceof Image) // do some other thing

关于java - 如何在同一个 Java 套接字上发送图像和文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7351649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com