通过socket传送图片的问题

paperen paperen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
通过socket传送客户端屏幕图片,但接收端好像始终有数据接收,而接收的数据量会大于送出的图片大小,比较原图片与收到的文件十六进制数据完全不同,本人小白,请各位给我点指导,谢

部分代码如下:

客户端

public class Client
{

public static void main( String[] args )
{

try
{
Socket client = new Socket( "localhost", 5888 );

OutputStream sender = client.getOutputStream();

// 获取到屏幕图片数据
BufferedImage img = Screen.SnapShot();
// 生成文件 这里是可以生成图片的,大小大概为88.7kb
ImageIO.write(img, "png", new File("screen.png"));

// 转为比特后发送
sender.write( Client.getCompressedImage( img ) );

client.close();
}
catch ( IOException e )
{
e.printStackTrace();
}

}

/**
* 图片转换为byte
* @param image
* @return
*/
public static byte[] getCompressedImage( BufferedImage image )
{
byte[] imageData = null;

try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "png", baos );
imageData = baos.toByteArray();
}
catch ( IOException ex )
{
imageData = null;
}

return imageData;
}
}


服务端

public class Server
{

/**
* @param args the command line arguments
*/
public static void main( String[] args )
{
try
{
ServerSocket server = new ServerSocket( 5888 );
Socket client = server.accept();

InputStream inputStream = client.getInputStream();
Scanner sc = new Scanner( inputStream );

String result = "";
int counter = 0;
while( sc.hasNextLine() )
{
result += sc.nextLine();
// 直接限制到400行就停止了,不加的话会一直循环…
if ( counter++ == 400 ) break;
}
byte[] resultToBytes = result.getBytes();

FileOutputStream out = new FileOutputStream( "test.png" );
// 生成的文件大于88.7kb 而且16进制与原图片的不同
out.write( resultToBytes );
out.close();

client.close();
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
...全文

相关推荐

Qt使用Socket传送图片

发送端: void Widget::on_pushButton_clicked() { qDebug()<<"sendPicture clicked"; QPixmap pix(tr("th.jpg")); QBuffer buffer; buffer.open(QIODevice::ReadWrite); pix.save(&buffer,"jpg"); quint32 pix_len = (quint32)buffer.data().

༺ཌༀ我不是程序员哇~~~ༀད༻

android socket发送图片

传送图片,开始信息不全,修改后总算正确传输。 java 写的服务器,把读取的图片保存到本地。 public class AndroidRunable implements Runnable { Socket socket = null; public AndroidRunable(Socket st) { this.socket = st; } public void run(

qq_29076343

总结 socket 连续发送图片

建立client - server 的过程: closesocket()并不能正真的关闭套接字,要想关闭后重新连接,需要设置sClient= INVALId_SOCKET; 并在客户端重新建立连接socket();程序如下: 一。客户端 #include "stdafx.h" #include  #include  #include  #include

sllin2012

Java TCP使用Socket进行网络图片传送

本文演示,使用Socket进行网络图片传送,实现客户端的client.bmp文件上传到服务端。 1)客户端,上传client.bmp图片给服务端,并接受服务端返回的“上传成功”消息。 2)服务端,接受客户端的图片并保存为server.bmp,同时给客户端发送“上传成功”消息。   客户端,代码如下:     package upload.photo.client;   ...

蔡定努

python 使用socket传输图片视频等文件的实现方式

这篇文章主要介绍了python 使用socket传输图片视频等文件的实现方式,本文给出了实例代码,需要的朋友可以参考下 在开发一些需要网络通信的应用中,经常会用到各种网络协议进行通信,博主在开发实验室的机器人的时候就遇到了需要把机器人上采集到的图片传回服务器进行处理识别,在python下的实现方式如下(只贴出了关键代码) 服务器端 LOCAL_IP = '192.168.100.22' #本机在...

程序员学府
评论 22
收藏 已收藏
分享
返回顶部
paperen
Java SE 62,620 成员 307,251 内容