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中,我们可以使用CFile类来读取图片文件,然后将文件内容转换为二进制数据流,以便通过Socket发送。例如,对于JPEG或PNG,我们通常会读取整个文件内容,而对于BMP,可能需要先处理文件头信息,因为BMP格式的...
VC++程序 所有格式图片TCP发送与接收程序,socket字节,此为客户端程序。
在本示例中,我们关注的是通过TCP协议利用Socket实现图片的传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的有序、无损传输。 首先,我们要理解...
这个socket通信demo 用vs2010...主要内容是发送端每隔一定时间发送自动生成的图片给接收端,接收端通过协议"begin"+"图片长度"+"图片"的方式进行拆包,最后保存图片。 里面写有日志。 代码里面有详细说明,供大家交流.
然后,客户端可以将图片数据打包成字节流,通过Socket发送到服务器。服务器接收到数据后,可以将其解码并保存为图片文件。 对于"单张图片发送",通常涉及读取图片文件内容,如JPEG或PNG格式,然后将这些二进制数据...
利用Socket传送图片,完整的客户端,服务器端源代码,里面涉及到多线程同步的一些常用方法,欢迎大家探讨
6. **发送图片**:一旦客户端连接成功,调用`ReadImageFile`读取图片文件并转换为字节数组,然后使用`clientSocket.Send`将字节流发送给客户端。 `ReadImageFile`方法负责读取图片文件到字节数组: - 创建`...
一旦连接建立,客户端可以使用Socket的OutputStream对象来发送图片数据。为了确保数据的完整性和正确性,通常会采用字节流(如InputStream和OutputStream)进行二进制数据的传输,因为图片数据通常是非文本的二进制...
通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将...
在本文中,我们将深入探讨如何使用C#的SuperSocket库创建自定义的内置命令行协议。SuperSocket是一个轻量级且高度可扩展的网络通信框架,适用于开发各种类型的TCP服务,如聊天应用、游戏服务器或者数据传输服务。...
利用DataOutputStream和DataInputStream实现由android客户端利用Socket向java服务器不间断传输图片,很好用。之间试过由OutpuStream.write(byte[])以及先将图片byte[]通过Base64加密转换为String再发送,效果都不好...
本篇文章将深入探讨如何在C#中使用Socket类来实现TCP数据的发送和接收。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保了数据包的顺序传输和错误校验。在C#中,Socket类是.NET ...
在这个主题中,我们将深入探讨如何在Linux环境下使用C++进行Socket编程,特别是实现图片和文件的传输功能。 一、Socket基础知识 Socket是网络通信的基本单元,它提供了进程间通信(IPC)的一种方法。在Linux中,...
总之,"摄像头通过socket发送图像到服务器"涉及Android的摄像头API、网络编程、图像处理和错误处理等多个技术领域。通过理解并实现这些步骤,开发者可以构建出实时传输摄像头数据的应用。这个过程需要对Android系统...
使用`MemoryStream`,我们可以将图片保存为字节流,再通过Socket发送。接收端收到字节流后,再用`Image.FromStream()`方法恢复成图片对象。 3. **文件传输**: 文件传输与图片类似,只是文件可能更大,因此需要...
5. **发送图像数据**:利用 hpsocket 的“发送数据”命令,将编码后的图像数据发送到对端。 6. **接收并解码**:在接收端,你需要使用“接收数据”命令获取传来的数据,并通过解码过程还原成原始的位图数据。 7. **...
常见的图片格式如JPEG、PNG和BMP都有特定的编码规则,服务器端可能需要使用图像处理库(如OpenCV或FreeImage)将图片数据转换成字节流,然后通过socket发送,客户端接收到数据后,再解码恢复成图片。 在实践中,...
在这个“socket实现实时消息发送包含图片文字”的主题中,我们将深入探讨如何利用Socket接口来构建一个能够发送和接收包括图片和文字在内的实时消息系统。 首先,我们要了解Socket的基本概念。Socket是进程间通信的...
本篇将深入探讨如何利用C#的Socket类进行消息、图片和文件的发送。 首先,我们要了解Socket的基本概念。Socket是网络编程中的一个抽象接口,它代表了两台计算机之间的连接。在C#中,我们可以使用System.Net.Sockets...