`
lvwenwen
  • 浏览: 959044 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

socket发送图片

阅读更多
package serverphoto;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;

public class ClientTest {
private ClientSocket cs = null;

private String ip = "localhost";// 设置成服务器IP

private int port = 8821;

private String sendMessage = "Windwos";

public ClientTest() {
try {
if (createConnection()) {
sendMessage();
getMessage();
}

} catch (Exception ex) {
ex.printStackTrace();
}
}

private boolean createConnection() {
cs = new ClientSocket(ip, port);
try {
cs.CreateConnection();
System.out.print("连接服务器成功!" + "\n");
return true;
} catch (Exception e) {
System.out.print("连接服务器失败!" + "\n");
return false;
}

}

private void sendMessage() {
if (cs == null)
return;
try {
cs.sendMessage(sendMessage);
} catch (Exception e) {
System.out.print("发送消息失败!" + "\n");
}
}

private void getMessage() {
if (cs == null)
return;
DataInputStream inputStream = null;
try {
inputStream = cs.getMessageStream();
} catch (Exception e) {
System.out.print("接收消息缓存错误\n");
return;
}

try {
// 本地保存路径,文件名会自动从服务器端继承而来。
String savePath = "D:\\update\\";
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
int passedlen = 0;
long len = 0;

savePath += inputStream.readUTF();
DataOutputStream fileOut = new DataOutputStream(
new BufferedOutputStream(new BufferedOutputStream(
new FileOutputStream(savePath))));
len = inputStream.readLong();

System.out.println("文件的长度为:" + len + "\n");
System.out.println("开始接收文件!" + "\n");

while (true) {
int read = 0;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen += read;
if (read == -1) {
break;
}
// 下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比
System.out.println("文件接收了" + (passedlen * 100 / len) + "%\n");
fileOut.write(buf, 0, read);
}
System.out.println("接收完成,文件存为" + savePath + "\n");

fileOut.close();
} catch (Exception e) {
System.out.println("接收消息错误" + "\n");
return;
}
}

public static void main(String arg[]) {
new ClientTest();
}
}


package serverphoto;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
int port = 1053;

void start() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
// 选择进行传输的文件
String filePath = "c:\\Picture\\5.jpg";
File fi = new File(filePath);

System.out.println("文件长度:" + (int) fi.length());

// public Socket accept() throws
// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。

s = ss.accept();
System.out.println("建立socket链接");
DataInputStream dis = new DataInputStream(
new BufferedInputStream(s.getInputStream()));
dis.readByte();

DataInputStream fis = new DataInputStream(
new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(s.getOutputStream());
// 将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java
// 4th里有现成的代码。
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((long) fi.length());
ps.flush();

int bufferSize = 8192;
byte[] buf = new byte[bufferSize];

while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}

if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
s.close();
System.out.println("文件传输完成");
}

} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String arg[]) {
new ServerTest().start();
}
}
分享到:
评论

相关推荐

    MFC Socket发送图片支持多种格式

    在MFC中,我们可以使用CFile类来读取图片文件,然后将文件内容转换为二进制数据流,以便通过Socket发送。例如,对于JPEG或PNG,我们通常会读取整个文件内容,而对于BMP,可能需要先处理文件头信息,因为BMP格式的...

    VC++ 6.0 所有格式的图片TCP发送接收程序 socket(2)

    VC++程序 所有格式图片TCP发送与接收程序,socket字节,此为客户端程序。

    Socket 图片传输

    在本示例中,我们关注的是通过TCP协议利用Socket实现图片的传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的有序、无损传输。 首先,我们要理解...

    Socket通信发送端向接收端发送图片Demo

    这个socket通信demo 用vs2010...主要内容是发送端每隔一定时间发送自动生成的图片给接收端,接收端通过协议"begin"+"图片长度"+"图片"的方式进行拆包,最后保存图片。 里面写有日志。 代码里面有详细说明,供大家交流.

    MFC Socket发送图片源程序

    然后,客户端可以将图片数据打包成字节流,通过Socket发送到服务器。服务器接收到数据后,可以将其解码并保存为图片文件。 对于"单张图片发送",通常涉及读取图片文件内容,如JPEG或PNG格式,然后将这些二进制数据...

    基于socket的图片传输

    利用Socket传送图片,完整的客户端,服务器端源代码,里面涉及到多线程同步的一些常用方法,欢迎大家探讨

    C#使用Socket实现发送和接收图片的方法

    6. **发送图片**:一旦客户端连接成功,调用`ReadImageFile`读取图片文件并转换为字节数组,然后使用`clientSocket.Send`将字节流发送给客户端。 `ReadImageFile`方法负责读取图片文件到字节数组: - 创建`...

    hpsocket 传输截图

    5. **发送图像数据**:利用 hpsocket 的“发送数据”命令,将编码后的图像数据发送到对端。 6. **接收并解码**:在接收端,你需要使用“接收数据”命令获取传来的数据,并通过解码过程还原成原始的位图数据。 7. **...

    利用Socket传送图片

    一旦连接建立,客户端可以使用Socket的OutputStream对象来发送图片数据。为了确保数据的完整性和正确性,通常会采用字节流(如InputStream和OutputStream)进行二进制数据的传输,因为图片数据通常是非文本的二进制...

    Java中Socket通信-客户端向服务端发送照片示例代码.rar

    通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将...

    C# SuperSocket 手把手教你入门 傻瓜教程-7(自定义SuperSocket内置的命令行协议)

    在本文中,我们将深入探讨如何使用C#的SuperSocket库创建自定义的内置命令行协议。SuperSocket是一个轻量级且高度可扩展的网络通信框架,适用于开发各种类型的TCP服务,如聊天应用、游戏服务器或者数据传输服务。...

    android客户端用socket不间断传输图片

    利用DataOutputStream和DataInputStream实现由android客户端利用Socket向java服务器不间断传输图片,很好用。之间试过由OutpuStream.write(byte[])以及先将图片byte[]通过Base64加密转换为String再发送,效果都不好...

    C# 使用Socket发送和接收TCP数据

    本篇文章将深入探讨如何在C#中使用Socket类来实现TCP数据的发送和接收。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保了数据包的顺序传输和错误校验。在C#中,Socket类是.NET ...

    liunx上socket C++编程(可以实现图片、文件传输)

    在这个主题中,我们将深入探讨如何在Linux环境下使用C++进行Socket编程,特别是实现图片和文件的传输功能。 一、Socket基础知识 Socket是网络通信的基本单元,它提供了进程间通信(IPC)的一种方法。在Linux中,...

    摄像头通过socket发送图像到服务器

    总之,"摄像头通过socket发送图像到服务器"涉及Android的摄像头API、网络编程、图像处理和错误处理等多个技术领域。通过理解并实现这些步骤,开发者可以构建出实时传输摄像头数据的应用。这个过程需要对Android系统...

    socket通信允许发送文字、图片、文件,可指定用户

    使用`MemoryStream`,我们可以将图片保存为字节流,再通过Socket发送。接收端收到字节流后,再用`Image.FromStream()`方法恢复成图片对象。 3. **文件传输**: 文件传输与图片类似,只是文件可能更大,因此需要...

    VC socket(网络编程)文件图片等传送(下)

    常见的图片格式如JPEG、PNG和BMP都有特定的编码规则,服务器端可能需要使用图像处理库(如OpenCV或FreeImage)将图片数据转换成字节流,然后通过socket发送,客户端接收到数据后,再解码恢复成图片。 在实践中,...

    C++OpenCv利用Socket通讯类传输图片或者视频

    以下将详细介绍如何利用C++和OpenCV通过Socket来传输图片或视频。 首先,**OpenCV** 是一个强大的计算机视觉库,提供了丰富的图像处理和计算机视觉功能,如图像读取、显示、处理、分析以及视频的捕获和编码等。在...

    socket实现实时消息发送包含图片文字

    在这个“socket实现实时消息发送包含图片文字”的主题中,我们将深入探讨如何利用Socket接口来构建一个能够发送和接收包括图片和文字在内的实时消息系统。 首先,我们要了解Socket的基本概念。Socket是进程间通信的...

Global site tag (gtag.js) - Google Analytics