设为首页 加入收藏

TOP

Java客户端上传图片(文件)到c++服务器(一)
2016-09-16 23:03:13 】 浏览:735
Tags:Java 客户端 上传 图片 文件 服务器

Java客户端上传图片(文件)到c++服务器

主要思路:将所有的数据类型都转化为byte流,对byte进行传输,c++服务器使用char数组,java使用byte数组进行图片(文件)的传输。

传输过程(socket建立连接的条件下):

C++服务器

TAG.h

#pragma once
 
#define _TAG_H_
#ifdef _TAG_H_
 
#include
  
   
#define BUF_LEN 2048
 
#define SendFile	0x01
#define StopSendFile	0x02
#define SendString	0x03
#define FileInfo	0x04
 
typedef struct
{
int ID;
BYTE lparam[BUF_LEN];
}COMMAND;
 
typedef struct {
long fileLenght;
char fileName[MAX_PATH];
}FILEINFO;
 
#endif // _TAG_H_
  

SocketHead.h

#pragma once
#include 
  
   
using namespace std;
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
 
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
{
// 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if (::WSAStartup(sockVersion, &wsaData) != 0)
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};
  

CPlusServer.cpp

// CPlusServer.cpp : 定义控制台应用程序的入口点。
//
/*
author:chenjianrun
time:	2016-9-15
city:	zhuhai
*/
#include "stdafx.h"
#include"SocketHead.h"
#include "iostream"
#include "string.h"
#include "fstream"
#include
  
   
#include"TAG.h"
using namespace std;
 
//初始化结构体SOCKADDR_IN
sockaddr_in initSockaddr_in();
//监听线程
DWORD WINAPI SListen(LPVOID lparam);
//接收文件
void recvFile(SOCKET socket);
//初始化socket
void InitSocket();
CInitSock initsocket;
int main()
{
InitSocket();
    return 0;
}
void InitSocket() {
SOCKET serverSocket;
SOCKET listenSocket;
sockaddr_in serveraddr = initSockaddr_in();
sockaddr_in clientaddr;
//创建socket
serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//进行绑定
bind(serverSocket, (sockaddr*)&serveraddr, sizeof(serveraddr));
//进行监听
listen(serverSocket, 5);
 
cout << "server start" << endl;
int len = sizeof(clientaddr);
while (true) {
if (listenSocket = accept(serverSocket, (sockaddr*)&clientaddr, &len));
{
//启动会话线程
CreateThread(NULL, NULL, SListen, (LPVOID)listenSocket, NULL, NULL);
cout << "CreateThread is start"<
   
    

Java客户端

Client.java

/*
author:chenjianrun
time:	2016-9-15
city:	zhuhai
*/
package client;
 
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Client {
 
private static NetDataTypeTransform transform1;
private static DataInputStream fromServerStream;
private static DataOutputStream toServerStream;
private static NetDataCommand dataCommand;
private static DataFileInfo dataFileInfo;
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost",8888);
toServerStream = new DataOutputStream(socket.getOutputStream());
//发送要发送文件的指令
int id = 1;
String tempStr = "4.jpg";
dataCommand = new NetDataCommand(id,tempStr);
toServerStream.write(dataCommand.getByteArrayData());
toServerStream.flush();
//启动发送文件线程
SendFileThread sendFileThread = new SendFileThread(socket);
sendFileThread.start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
 
}

NetDataTypeTransform.java

package client;
 
import java.io.UnsupportedEncodingException;
 
public class NetDataTypeTransform {
public static final String coding="GB2312"; //全局定义,以适应
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Effective Modern C++ 条款38 意.. 下一篇VC++入门经典学习笔记--虚函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目