通过socket传送图片的问题
通过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();
}
}
}
...全文
相关推荐
利用Socket传送图片
在“利用Socket传送图片”的场景中,服务器端通常会创建一个ServerSocket实例,监听特定端口上的连接请求。
C# Socket 分包传送数据
本资源聚焦于“C# Socket分包传送数据”,特别是涉及图片这种大文件的传输策略。以下是对这个主题的详细讲解:首先,理解Socket的基本概念。
网络编程(socket)文件图片等传送
在文件和图片的传送中,由于其对数据完整性的要求较高,通常选择TCP作为传输协议。在给定的文件中,`TcpFileClient`和`TcpFileServer`分别代表了客户端和服务器端的实现。
Android_Socket_客户端和服务器端,支持多张图片同时传送,自定义协议头
本项目"Android_Socket_客户端和服务器端,支持多张图片同时传送,自定义协议头"着重解决了如何通过Socket实现在Android设备上进行图片的高效传输,并且通过自定义协议头来增强数据传输的安全性和可靠性
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().


Java SE
