公开课小结--0x01Windows

SDK software develop kits
(API的集合)
MFCMicrosoft foundation class
  • messagebox(hwnd,L" ",L" ",MB_OK);     win32 PSDK ->API
  • messagebox (L" ")                                        MFC  PSDK ->API
文件读取:
 int readFile(char* path,void** buff,long &size)
 {
         FILE* fp = NULL;
         if ((fp = fopen(path, "rb")) == NULL)
         {
                 printf("fopen()打开文件失败\n");
                 return 0;
         }
         fseek(fp, 0, SEEK_END);//把文件内部指针定位到结束的位置,成功返回0;
         size = ftell(fp);
         rewind(fp);//把文件内部指针重新定位到文件的起始位置

         if((*buff  = (char*)malloc(size)) == NULL)
         {
                 printf("申请内存失败\n");
                 return 0;
         }
         fread(*buff, size, 1, fp);
         fclose(fp);
         return 1;
 }

复制文件至系统目录:
原型:_INTRIMP wchar_t *wcscat(
wchar_t *strDestination, //'\0'结尾的目标字符串
const wchar_t *strSource //'\0'结尾的源字符串
);
用法:#include <stdlib.h>
功能:把strSource所指字符串添加到strDestination结尾处,覆盖strDestination结尾处的'\0'并添加'\0'。
说明:strSource和strDestination所指内存区域不可以重叠且strDestination必须有足够的空间来容纳strSource的字符串。
返回值 : 返回指向strDestination的 指针. No return value is reserved to indicate an error.
备注 : 因为wcscat在strDestination追加strSource前不进行检查,这是一个 缓冲区溢出的潜在原因。故使用时应注意。推荐使用wcscat_s替代.

#include "stdafx.h"
#include <windows.h>

int main()
{
       wchar_t strSystemDir[MAX_PATH] = {};
       wchar_t strWindowsDir[MAX_PATH] = {};
       wchar_t strSelfDir[MAX_PATH] = {};
       GetSystemDirectoryW(strSystemDir, MAX_PATH);
       GetWindowsDirectoryW(strWindowsDir, MAX_PATH);
       GetModuleFileNameW(0, strSelfDir, MAX_PATH);

       wcscat_s(strSystemDir, L"\\CopyFileDemo_.exe");
       wcscat_s(strWindowsDir, L"\\CopyFileDemo_.exe");

       if (FALSE == CopyFileW(strSelfDir, strSystemDir, FALSE))
       {
              DWORD dwError = GetLastError();
              printf("%d\n", dwError);
       }
       if (FALSE == CopyFileW(strSelfDir, strWindowsDir, FALSE))
       {
              DWORD dwError = GetLastError();
              printf("%d\n", dwError);

       }
       return 0;
}

WINSOCK:
*****************
winsockServer
*****************
#include "stdafx.h"
#include <WinSock2.h>
#include <Windows.h>

int main()
{

       WSADATA wsaData = {};
       WSAStartup(MAKEWORD(2, 2), &wsaData);
       //socket(通信协议族tcp/ip)
       SOCKET sockServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
       //SOCKET s = socket(PF_INET, SOCK_DGRAM, IPPROTO_TCP);  udp
       sockaddr_in sockAddr = {};
       //协议族
       sockAddr.sin_family = PF_INET;
       //ip 当前需要制定的ip地址
       sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
       sockAddr.sin_port = htons(10086);


       bind(sockServer, (SOCKADDR*)&sockAddr, sizeof(sockAddr));

       listen(sockServer, 10);

       SOCKET sockClient = {};
       SOCKADDR addrClient = {};
       int nSize = sizeof(addrClient);
       sockClient = accept(sockServer, &addrClient, &nSize);

       printf("客户端已连接");
       closesocket(sockServer);
       closesocket(sockClient);


       WSACleanup();
    return 0;
}

******************
winsockClient
******************
// WinSockDemoClient.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <WinSock2.h>
#include <Windows.h>
#pragma comment(lib,"ws2_32")
int main()
{
       WSADATA wsaData = {};
       WSAStartup(MAKEWORD(2, 2), &wsaData);

       SOCKET sockClient = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

       sockaddr_in addrServer = {};
       addrServer.sin_family = PF_INET;
       addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
       addrServer.sin_port = htons(10086);

       connect(sockClient, (SOCKADDR*)&addrServer, sizeof(addrServer));

       closesocket(sockClient);
       WSACleanup();
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的Socket和InputStream类来读取Socket中返回的ASCII数据,然后根据题目要求进行转义和生成图片。 下面是一个简单的示例代码,可以实现读取Socket中的数据并进行转义和生成图片: ```java import java.io.*; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class SocketReader { public static void main(String[] args) throws IOException { String host = "localhost"; int port = 8080; Socket socket = new Socket(host, port); InputStream inputStream = socket.getInputStream(); List<Byte> bytes = new ArrayList<>(); int b; while ((b = inputStream.read()) != -1) { if (b == 0x7D) { bytes.add((byte) 0x7D); bytes.add((byte) 0x01); } else if (b == 0x5B) { bytes.add((byte) 0x7D); bytes.add((byte) 0x02); } else if (b == 0x5D) { bytes.add((byte) 0x7D); bytes.add((byte) 0x03); } else if (b == 0x2C) { bytes.add((byte) 0x7D); bytes.add((byte) 0x04); } else if (b == 0x2A) { bytes.add((byte) 0x7D); bytes.add((byte) 0x05); } else { bytes.add((byte) b); } } byte[] imageData = new byte[bytes.size()]; for (int i = 0; i < bytes.size(); i++) { imageData[i] = bytes.get(i); } FileOutputStream outputStream = new FileOutputStream("image.jpg"); outputStream.write(imageData); outputStream.close(); socket.close(); } } ``` 在上述代码中,我们首先建立了一个到指定主机和端口的Socket连接,并获取了该Socket连接的输入流。然后我们通过循环读取输入流中的数据,并根据题目要求对数据进行转义,最后将转义后的数据写入到一个字节数组中。 接着,我们将字节数组写入到一个文件中,生成图片。在这里,我们假设输入的ASCII数据就是一张JPEG图片,并将它写入到名为“image.jpg”的文件中。 需要注意的是,上述代码是一个简单的示例,实际的应用场景可能会更加复杂,需要根据具体的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值