客户端程序源代码
- 格式:doc
- 大小:28.00 KB
- 文档页数:3
SFTP客户端代码⽰例参考链接:操作系统:Windows7/8,VS2013环境:libssh2 1.4.3、zlib-1.2.8、openssl-1.0.1g原⽂:C:\Program Files (x86)\Microsoft VisualStudio 12.0\VC\lib提⽰找不到ws2_32.lib或odbc32.lib,添加下⾯的链接路径C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.1A\Lib编译通过后⽂件输出到\libssh2-1.4.3\win32\Release_lib路径下”更新:libssh2.dsw⽂件位置:\libssh2-1.4.3\libssh2-1.4.3\win32zlib的头⽂件是zlib.h,库⽂件是:zlib.libopenssl的头⽂件是:opensslconf.h,库⽂件是:libeay32.lib,ssleay32.libzlib的头⽂件(zlib.h)位置:\libssh2-1.4.3\zte\zlib-1.2.5,库⽂件(zlib.lib)位置:\libssh2-1.4.3\zte\openssl-1.0.0b staticlib\Debug openssl头⽂件(opensslconf.h)位置:\libssh2-1.4.3\zte\openssl-1.0.1l\include\openssl,库⽂件(libeay32.lib,ssleay32.lib)位置:\libssh2-1.4.3\zte\openssl-1.0.0b staticlib\Debug分两个步骤:1.先编译输出libssh2.lib(1)配置好zlib和openssl的头⽂件和库⽂件链接位置后,编译libssh2项⽬即可,这时可以把tests项⽬卸载,反正⽤不到嘛;编译成功后,输出libssh2.lib到\libssh2-1.4.3\win32\Release_lib路径下,(ps:我这⾥⽣成的是libssh2d.lib,我把⽂件名改为libssh2.lib后可以正常使⽤)2.执⾏客户端,进⾏下载图⽚;新建个项⽬,把下⽂三个⽂件拷贝到项⽬中,配置libssh2.h,libssh2.lib链接位置后,即可执⾏成功;注意:路径及⽂件名不能含有中⽂,否则会报错;下⾯是SFTP客户端⽰例代码:三个⽂件的下载地址:(密码:1qhf)main.cpp1 #include "SFTP_Libssh2.h"2 #include <iostream>34int main(int argc, char* argv[])5 {6//下⾯的代码只要在进程初始化的时候执⾏7 kagula::network::SFTP_Init();89//测试SFTP链接10 kagula::network::SFTP_Libssh2* client = kagula::network::SFTP_Libssh2::Inst();11 std::string ip = "192.168.19.130";12 uint16_t port = 22;13 std::string usr = "kagula";14 std::string pwd = "123456";15if (false == client->IsAbilityConn(ip, port, usr, pwd))16 {17 std::cout << client->strLastError << std::endl;18return -1;19 }2021//测试⽂件上传,d:\\temp\\a.html22if (0 != client->upload(ip, 22, usr, pwd, "d:\\temp\\a.html", "/home/kagula/a.html"))23 {24 std::cout << "Error:" << client->strLastError << std::endl;25 } else26 {27 std::cout << client->strLastError << std::endl;28 }293031//测试⽂件下载32if (0 != client->download(ip, 22, usr, pwd, "/home/kagula/a.html","d:\\temp\\b.html" ))33 {34 std::cout << "Error:" << client->strLastError << std::endl;35 }36else37 {38 std::cout << client->strLastError << std::endl;39 }4041//进程准备结束,释放资源的时候,运⾏下⾯的代码42 kagula::network::SFTP_Exit();43return0;44 }SFTP_Libssh2.h1#pragma once23 #include <string>4 #include <atomic>56/*7功能:SFTP协议的⽂件传输功能8最后更新⽇期:2014-5-179简介:借助Libssh2库很容易实现sftp,ssh2客户端,这⾥给出10如何实现Sftp客户端的代码11测试环境:Windows 8.1 64bit、Visual Studio 2013 Professional SP112 OpenSSL 1.0.1g、zlib-1.2.8、libssh2 1.4.313 Win32控制台项⽬14注意:动态链接需要把“libssh2.dll”⽂件复制到当前项⽬路径下15说明:原来的代码⽀持多线程,从应⽤程序抽出来的时候简化了,16你可以修改代码使它同时⽀持上传或下载多个⽂件。
开源代码simple_pjsua代码解读简介:开源代码simple_pjsua是一个基于PJSIP库的简单SIP用户代理应用程序。
本文将对simple_pjsua代码进行解读,介绍其主要功能和实现原理。
一、功能介绍simple_pjsua是一个SIP用户代理应用程序,可以实现SIP协议的基本功能,包括注册、呼叫、接听、挂断等。
它提供了一个简单的命令行界面,用户可以通过命令来操作SIP通信。
二、代码结构simple_pjsua的代码结构清晰,主要包括以下几个文件:1. main.c:程序的入口文件,包含了主函数和一些全局变量的定义。
2. pjsua_app.c:定义了SIP用户代理的初始化、注册、呼叫等功能的实现。
3. pjsua_app.h:定义了SIP用户代理的相关结构体和函数的声明。
4. pjsua_cmd.c:定义了命令行界面的实现,包括命令的解析和执行。
5. pjsua_cmd.h:定义了命令行界面的相关结构体和函数的声明。
三、实现原理1. 初始化在main函数中,首先调用pjsua_app_init函数进行SIP用户代理的初始化。
该函数会创建一个pjsua_app_t结构体,并调用pjsua_create函数创建一个PJSUA库实例。
然后,通过pjsua_config结构体设置一些配置参数,如SIP服务器地址、端口号等。
最后,调用pjsua_init函数初始化PJSUA库。
2. 注册在pjsua_app_register函数中,首先创建一个pjsua_acc_config结构体,并设置一些注册参数,如用户名、密码、SIP服务器地址等。
然后,调用pjsua_acc_add函数将该账号添加到PJSUA库中。
最后,调用pjsua_acc_set_default函数将该账号设置为默认账号。
3. 呼叫在pjsua_app_call函数中,首先创建一个pjsua_call_setting结构体,并设置一些呼叫参数,如呼叫的目标地址、媒体参数等。
前言围棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
同时它起源于中国,古称“弈”,是我国传统技艺之一。
本游戏软件提供了人机对弈,和棋手对弈(局域网对弈)两种模式,局域网模式可以保证多人同时进行游戏。
本软件使用C#语言编写,在windows 7 x64系统下采用Visual Studio 2010开发和调试,附源码如下。
客户端程序:ype){case = (margin_left + i * gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2);= (chessSize * 2);, rect);if (m_bShowIndex && m_Board[i, j].step > 0){(m_Board[i, j].(), fontNumber, , rect, format);}break;case = (margin_left + i * gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2);= (chessSize * 2);int centerX = (margin_left + i * gap);int centerY = (margin_top + j * gap);, rect);(new Pen, 3), centerX - chessSize / 2, centerY - chessSize / 2, centerX + chessSize / 2, centerY + chessSize / 2);if (m_bShowIndex && m_Board[i, j].step > 0){(m_Board[i, j].(), fontNumber, , rect, format);}break;case = (margin_left + i * gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2);= (chessSize * 2);, rect);if (m_bShowIndex && m_Board[i, j].step > 0){(m_Board[i, j].(), fontNumber, , rect, format);}break;case = (margin_left + i * gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2);= (chessSize * 2);centerX = (margin_left + i * gap);centerY = (margin_top + j * gap);, rect);(new Pen, 3), centerX - chessSize / 2, centerY - chessSize / 2, centerX + chessSize / 2, centerY + chessSize / 2);if (m_bShowIndex && m_Board[i, j].step > 0){(m_Board[i, j].(), fontNumber, , rect, format);}break;case = (margin_left + i * gap - chessSize / 2);= (margin_top + j * gap - chessSize / 2);= (chessSize);= (chessSize);, rect);break;case = (margin_left + i * gap - chessSize / 2);= (margin_top + j * gap - chessSize / 2);= (chessSize);= (chessSize);, rect);break;case = (margin_left + i * gap - chessSize / 2);= (margin_top + j * gap - chessSize / 2);= (chessSize);= (chessSize);, rect);break;}}}}ype != return false;ype = type;#region 判断是否可以提子bool bEat = false;bool bValidStep = true;ype == (type)){ype == (type)){bEat = tryToEat(pos, new + 1, , ref bValidStep) || bEat;if (!bValidStep)return false;}ype == (type)){bEat = tryToEat(pos, new , - 1), ref bValidStep) || bEat;if (!bValidStep)return false;}ype == (type)){bEat = tryToEat(pos, new , + 1), ref bValidStep) || bEat;if (!bValidStep)return false;}#endregionif (!bEat)tep = m_currentStep;m_Board[, ].pos = pos;m_currentStep++;return true;}ype = newBoard[i, j];}}return true;}ype == '0' : (m_Board[j, i].type == '1' : '2';(ch);}(strLine);}();return true;}ype == {ChessBlock block;findBlock(new (i, j), out block);if > 0){type = foreach pos in block){if{newType = m_Board[ - 1, ].type;if (type == &&(newType == || newType == {type = newType;}else{if (type != &&type == (newType)){type = break;}}}if{newType = m_Board[ + 1, ].type;if (type == && (newType == || newType == {type = newType;}else{if (type != && type == (newType)){type = break;}}}if{newType = m_Board[, - 1].type;if (type == && (newType == || newType == {type = newType;}else{if (type != && type == (newType)){type = break;}}}if{newType = m_Board[, + 1].type;if (type == && (newType == || newType == {type = newType;}else{if (type != && type == (newType)){type = break;}}}}if (type == type = else if (type == type = elsetype = foreach posToFill in block){m_Board[, ].type = type;}}}}}}ype == {ChessBlock block;findBlockOnSim(new (i, j), out block);if > 0){type = foreach pos in block){if{newType = [ - 1, ].type;if (type == &&(newType == ||newType =={type = newType;}else{if (type != &&type == (newType)){type = break;}}}if{newType = [ + 1, ].type;if (type == && (newType == || newType == {type = newType;}else{if (type != && type == (newType)){type = break;}}}if{newType = [, - 1].type;if (type == && (newType == || newType == {type = newType;}else{if (type != && type == (newType)){type = break;}}}if{newType = [, + 1].type;if (type == && (newType == || newType == {type = newType;}else{if (type != && type == (newType)){type = break;}}}}if (type == type = else if (type == type = elsetype = foreach posToFill in block){[, ].type = type;}}}}}}ype == || m_Board[i, j].type == || m_Board[i, j].type == {m_Board[i, j].type = }}}}ype;if (type == || type == ||type == || type == {ChessBlock block;findBlock(pos, out block);if > 0){typeResult = switch (type){case typeResult = break;case typeResult = break;case typeResult = break;case typeResult = break;}foreach posToToggle in block){m_Board[, ].type = typeResult;}}}}ype == {m_Board[i, j].type = }else if (m_Board[i, j].type == {m_Board[i, j].type = }}}}ype){case case case nBlack++;break;case case case nWhite++;break;default:nPending++;break;}}}double fBlack = nBlack + (double)nPending / 2;double fWhite = nWhite + (double)nPending / 2;StringBuilder strResult = new StringBuilder();("黑子: " + () + "\n");("白子: " + () + "\n\n");("结果: ");fWhite += ;if (fBlack > fWhite){("黑子赢" + (fBlack - fWhite).ToString());}else if (fWhite > fBlack){("白子赢" + (fWhite - fBlack).ToString());}return ();}ype;while > 0){posCurrent = ();ype == type){(pos1);(pos1);}}ype == type){(pos1);(pos1);}}ype == type){(pos1);(pos1);}}ype == type){(pos1);(pos1);}}}}ype;while > 0){posCurrent = ();ype == type){(pos1);(pos1);}}ype == type){(pos1);(pos1);}}ype == type){(pos1);(pos1);}}ype == type){(pos1);(pos1);}}}}吃别人(包括劫持)被自己吃了Queue posToProcceed = new Queue();ype;ype == return true;if (!(pos1) && ype == type) ype == return true;if (!(pos1) && ype == type) ype == return true;if (!(pos1) && ype == type) ype == return true;if (!(pos1) && ype == type) ype = } }ype = }os, m_Board_backup[i, j].type, m_Board_backup[i, j].step);}}= = -= 2;return true;}os, m_Board[i, j].type, m_Board[i, j].step);}}= = }#region ==== 单人游戏时====ype == &&[i, j].step == 0){if (new (i, j), ))(new Node(new (i, j)));}}}if <= 0){= true;}#endregion#region 每个节点都进行若干回合的模拟棋局foreach (Node root in move_Node){for (int i = 0; i < numsim; ++i){CopyState(root); /* 复制棋局信息*/play_simulation(root); /* 进行模拟*/}}#endregionNode n = GetBestChild(move_Node); /* 获得根节点的访问次数最多的子节点*/return ; /* 返回节点着手*/}private bool CanAddChess pos, type){ype != return false;ype = type;#region 判断是否可以提子bool bEat = false;bool bValidStep = true;bool result = true;ype == (type)){ype == (type)){bEat = ChecktryToEat(pos, new + 1, , ref bValidStep) || bEat;if (!bValidStep)result = false;}ype == (type)){bEat = ChecktryToEat(pos, new , - 1), ref bValidStep) || bEat;if (!bValidStep)result = false;}ype == (type)){bEat = ChecktryToEat(pos, new , + 1), ref bValidStep) || bEat;if (!bValidStep)result = false;}#endregionype = return result;}private bool ChecktryToEat posNewChess, posToEat, ref bool bValidStep) {bValidStep = true;chessBlock;if (!isLive(posToEat, out chessBlock))ype != {return true;}}}return false;}private void CopyState(Node n){for (int i = 0; i < 19; ++i){for (int j = 0; j < 19; ++j){[i, j] = new Chess[i, j].pos, [i, j].type, [i, j].step);}}= = = ;, }ype){case case case nBlack++;break;case case case nWhite++;break;default:nPending++;break;}}}double fBlack = nBlack + (double)nPending / 2;double fWhite = nWhite + (double)nPending / 2;fWhite += ;if ((fBlack > fWhite && .ChessType .White)||(fBlack < fWhite && == {os;Chess chs = new Chess(pos, type, ;return chs;}ype != return false;ype = type;#region 判断是否可以提子bool bEat = false;bool bValidStep = true;ype == (type)){bEat = tryToEatOnSim(pos, new - 1, , ref bValidStep) || bEat;if (!bValidStep)return false;}ype == (type)){bEat = tryToEatOnSim(pos, new + 1, , ref bValidStep) || bEat;if (!bValidStep)return false;}ype == (type)){bEat = tryToEatOnSim(pos, new , - 1), ref bValidStep) || bEat;if (!bValidStep)return false;}ype == (type)){bEat = tryToEatOnSim(pos, new , + 1), ref bValidStep) || bEat;if (!bValidStep)return false;}#endregionif (!bEat)ype = else if (type == [, ].type = return false;tep = ;++;return true;}Eat others (Include "jie")Be eaten yourselfQueue posToProcceed = new Queue();ype;ype == return true;if (!(pos1) && ype == type) ype == return true;if (!(pos1) && ype == type) ype == return true;if (!(pos1) && ype == type) ype == return true;if (!(pos1) && ype == type) ype = ype =else[, ].type = }}ype;if (type == [, ].type = else if (type == [, ].type = }ins){();(node);}else if == temp1[0].wins){(node);}}List<Node> temp2 = new List<Node>();foreach (Node node in temp1){pos = ;if - <= 1 ||- <= 1){(node);continue;}if (3, , ){(node);}}Node result ;if > 0)result = temp2[ - 1)];elseresult = temp1[ - 1)];return result;}#endregion ==== 单人游戏时====;}amePlayer[side].user = user;gameTable[tableIndex].gamePlayer[side].someone = true;("{0}在第{1}桌第{2}座入座",, tableIndex + 1, side + 1));amePlayer[anotherSide].someone == true){amePlayer[anotherSide].;(user, sendString);}amePlayer[side].someone = false;gameTable[tableIndex].gamePlayer[side].started = false;gameTable[tableIndex].gamePlayer[side].grade = 0;anotherSide = (side + 1) % 2;if (gameTable[tableIndex].gamePlayer[anotherSide].someone == true){gameTable[tableIndex].gamePlayer[anotherSide].started = false;gameTable[tableIndex].gamePlayer[anotherSide].grade = 0;}ength +splitString[1].Length));(gameTable[tableIndex], sendString);break;case "Ready":amePlayer[side].started = true;if (side == 0){anotherSide = 1;sendString = "Message,黑方已准备。
C++编写的WebSocket服务端客户端实现⽰例代码⽬录使⽤过标准的libwebsockets服务端库测试过,主要是短⼩精悍,相对于libwebsockets不需要依赖zlib和openssl 以及其他库,直接make就可以使⽤了,linux跟windows都可以使⽤。
测试⽤例:#include "easywsclient.hpp"#include <assert.h>#include <stdio.h>#include <string>using easywsclient::WebSocket;static WebSocket::pointer ws = NULL;void handle_message(const std::string & message){printf(">>> %s\n", message.c_str());if (message == "world") { ws->close(); }}int main(){ws = WebSocket::from_url("ws://localhost:8126/foo");assert(ws);//判断ws对象是否为空nullws->send("goodbye");ws->send("hello");//如果你需要多线程,可以在⼀个thread 维护该ws的连接重连机制while (ws->getReadyState() != WebSocket::CLOSED) //判断ws是否正常连接{ws->poll();//这个必须要调⽤,否则不能发送,发送跟接收都是异步的,都是在这个poll函数⾥监测处理的ws->dispatch(handle_message);}delete ws;return 0;}//线程thread 维护重连连接void run(){bool conn = FLASE;ws = WebSocket::from_url("ws://localhost:8126/foo");//如果你需要多线程,可以在⼀个thread 维护该ws的连接重连机制while (1) //判断ws是否正常连接{if(ws != NULL){ws->poll(0);//这个必须要调⽤,否则不能发送,发送跟接收都是异步的,都是在这个poll函数⾥监测处理的ws->dispatch(handle_message);if(ws->getReadyState() == WebSocket::CLOSED){//ws连接断开重连delete ws;ws = NULL;ws = WebSocket::from_url("ws://localhost:8126/foo");}else if(wss->getReadyState()== WebSocket::OPEN){//ws连接ok// ws->send("goodbye");ws->send("hello");}}else{ws = WebSocket::from_url("ws://localhost:8126/foo");sleep(1);}if(ws!=NULL)delete ws;}有细⼼的朋友发现在发送中⽂GBK 的时候与服务端会断开//GBK -> UTF-8//遇到发送的字符串⾥有中⽂的话需要send 前进⾏转换⼀下,//这个是⽹友提供的在windows下的转换函数std::string Server_Stream::GBKToUTF8(const std::string& strGBK){std::string strOutUTF8 = "";WCHAR * str1;int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);str1 = new WCHAR[n];MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);char * str2 = new char[n];WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);strOutUTF8 = str2;delete[]str1;str1 = NULL;delete[]str2;str2 = NULL;return strOutUTF8;}下⾯是C++实现的WebSocket客户端,写好后这⾥记⼀下,免得以后忘记。
python程序源代码(实用版)目录1.Python 程序源代码概述2.Python 程序源代码的特点3.Python 程序源代码的发展4.Python 程序源代码的应用领域5.Python 程序源代码的未来发展趋势正文一、Python 程序源代码概述Python 程序源代码是一种采用 Python 语言编写的计算机程序代码。
Python 语言作为一门广泛应用于多个领域的编程语言,其源代码具有简洁、易读、高效等特点,深受广大开发者喜爱。
二、Python 程序源代码的特点1.语法简洁:Python 语言的语法简洁明了,使得编写程序变得轻松愉快。
2.易读性强:Python 源代码结构清晰,可读性强,易于维护。
3.高效开发:Python 源代码具有丰富的库和框架支持,可以快速开发出高质量的应用程序。
4.跨平台:Python 源代码支持多种操作系统,如 Windows、Linux、Mac OS 等,具有较高的可移植性。
三、Python 程序源代码的发展Python 语言自 1991 年诞生以来,经历了多次版本更新,其源代码也在不断完善和丰富。
如今,Python 已经成为全球最受欢迎的编程语言之一,其源代码在多个领域都有着广泛的应用。
四、Python 程序源代码的应用领域Python 源代码在众多领域都有广泛应用,如:1.Web 开发:Python 源代码在 Web 开发领域有着丰富的框架支持,如 Django、Flask 等,可以快速构建高质量的 Web 应用。
2.数据分析:Python 源代码在数据分析领域有着强大的支持,如Pandas、NumPy 等库,可以方便地处理和分析海量数据。
3.人工智能:Python 源代码在人工智能领域有着广泛的应用,如TensorFlow、PyTorch 等深度学习框架,可以助力开发者快速开发智能应用。
4.网络编程:Python 源代码在网络编程方面有着丰富的库支持,如Requests、asyncio 等,可以方便地处理网络编程相关任务。
源代码说明文档范文一、引言源代码是程序编写的文本文件。
它包含了程序的逻辑结构、功能实现和计算机命令等内容。
源代码说明文档是对源代码进行解释和说明的文档,旨在让用户、开发人员和审查人员能够更好地了解代码的结构、功能和实现细节。
本文档将详细介绍源代码的组成部分、结构、功能和使用方法,并提供示例代码和运行结果,以便读者更好地理解和使用源代码。
二、源代码结构源代码通常由多个文件组成,这些文件按照功能和关联进行组织。
常见的源代码结构包括以下几个部分:1.引用库:源代码中可能会引用其他已经存在的代码库,用于实现一些公共功能。
在本部分中,会列出所有用到的引用库,并说明其作用和使用方法。
3.主函数:源代码中通常有一个主函数,负责程序的入口和流程控制。
在本部分中,会详细说明主函数的结构和功能,并提供示例代码和运行结果。
4.功能函数:源代码中可能会包含一些功能函数,用于实现具体的功能模块或算法。
在本部分中,会说明每个功能函数的作用和使用方法,并提供示例代码和运行结果。
三、使用方法源代码的使用方法包括以下几个方面:1.环境配置:源代码可能需要在特定的编程环境中编译和运行,本部分会详细说明所需的编程环境和配置步骤,并提供相关的链接和资源。
2.编译和运行:本部分会说明如何编译源代码,并提供示例命令和运行结果。
3.参数设置:源代码可能会接受一些输入参数,本部分会说明每个参数的含义和设置方法。
4.输出结果:源代码可能会输出一些结果,本部分会说明每个输出结果的含义和格式。
四、示例代码下面是一个简单的示例代码,用于说明源代码的结构和使用方法:1.引用库本示例代码没有引用任何外部库。
2.定义和声明本示例代码定义了一个名为"HelloWorld"的类,其中包含一个静态函数"main"。
3.主函数在主函数中,首先输出了一条欢迎信息,然后打印了Hello World。
```public class HelloWorldpublic static void main(String[] args)System.out.println("Hello World");}```4.编译和运行本示例代码使用Java编程语言编写,可以使用命令行或集成开发环境(IDE)进行编译和运行。
简单的源代码编写中文编程越来越受到人们的关注,这里我们来介绍一些简单的源代码编写。
首先,我们可以编写一个简单的“Hello,World!”程序,用来验证我们的开发环境是否正确配置:```encoding=utf-8print("Hello,World!")```该程序的输出结果就是“Hello,World!”,这也是经典的初学者示例。
接着,我们可以看看如何编写一个简单的计算器程序:```encoding=utf-8a=float(input("请输入第一个数:"))b=float(input("请输入第二个数:"))c=input("请选择你要进行的运算,例如:+、-、*、/:")if c=='+':print(a+b)elif c=='-':print(a-b)elif c=='*':print(a*b)elif c=='/':if b==0:print("被除数不能为零!")else:print(a/b)else:print("输入的运算符有误!")```该程序首先让用户输入两个数和要进行的运算符,然后根据用户输入进行相应的运算,最后输出结果。
在此,我们使用了if语句来判断不同的运算符,并计算出运算结果。
最后,我们可以尝试编写一个简单的猜数字游戏程序:```encoding=utf-8import randomanswer=random.randint(1,100)times=0while True:guess=int(input("请输入一个1~100之间的整数:"))times+=1if guess>answer:print("太大了,请重新输入!")elif guess<answer:print("太小了,请重新输入!")else:print("恭喜你,猜对了!你一共猜了%d次。
页面布局模块程序代码MainActivity.javapackage com.my.llkangame;//第一个页面import android.app.ListActivity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.plter.lib.android.java.controls.ArrayAdapter;import com.plter.linkgame.R;public class MainActivity extends ListActivity {private ArrayAdapter<GameListCellData> adapter;//定义适配器private ProgressDialog dialog=null;//dialog//savedInstanceStateprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main_activity);//main_activity.xml//设置适配器adapter=newArrayAdapter<MainActivity.GameListCellData>(this,yout.game_list_cell) {@Overridepublic void initListCell(int position, View listCell, ViewGroup parent) {ImageView iconIv = (ImageView) listCell.findViewById(R.id.iconIv);TextView labelTv=(TextView) listCell.findViewById(belTv);GameListCellData data = getItem(position);iconIv.setImageResource(data.iconResId);labelTv.setText(bel);}};setListAdapter(adapter);//适配器集合adapter.add(new GameListCellData("水果连连看", R.drawable.sg_icon, "sg_config.json"));adapter.add(new GameListCellData("蔬菜连连看", R.drawable.sc_icon, "sc_config.json"));adapter.add(new GameListCellData("动物连连看", R.drawable.dw_icon, "dw_config.json"));adapter.add(new GameListCellData("爱心连连看", R.drawable.love_icon, "love_config.json"));adapter.add(new GameListCellData("宝石连连看", R.drawable.coin_icon, "coin_config.json"));}@Overrideprotected void onPause() {if (dialog!=null) {dialog.dismiss();dialog=null;}super.onPause();}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {dialog=ProgressDialog.show(this, "请稍候", "正在加载游戏资源");GameListCellData data = adapter.getItem(position);Intent i = new Intent(this, LinkGameActivity.class);i.putExtra("configFile", data.gameConfigFile);startActivity(i);super.onListItemClick(l, v, position, id);}public static class GameListCellData{public String label=null;public int iconResId=0;public String gameConfigFile=null;public GameListCellData(String label,int iconResId,String gameConfigFile) {bel=label;this.iconResId=iconResId;this.gameConfigFile=gameConfigFile;}}}LinkGameActivity.javapackage com.my.llkangame;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.view.Display;import android.widget.Button;import android.widget.TextView;import com.my.cord.Config;import com.my.cord.GameViewhhxx;import com.my.reader.InnerGameReader;import com.plter.linkgame.R;//游戏开始界面宽高、布局等且开始游戏public class LinkGameActivity extends Activity {private GameViewhhxx gameView;/** Called when the activity is first created. */@SuppressWarnings("deprecation")public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String configFile = getIntent().getStringExtra("configFile");if (TextUtils.isEmpty(configFile)) {finish();return;}//获得屏幕宽高Display display = getWindowManager().getDefaultDisplay();Config.setScreenWidth(display.getWidth());Config.setScreenHeight(display.getHeight());//设置内容布局setContentView(yout.link_game_activity);gameView=(GameViewhhxx) findViewById(R.id.gameView);gameView.setTimeTv((TextView) findViewById(R.id.timeTv));gameView.setLevelTv((TextView) findViewById(R.id.levelTv));gameView.setBreakCardsBtn((Button) findViewById(R.id.breakCardsBtn));gameView.setNoteBtn((Button) findViewById(R.id.noteBtn));gameView.setPauseBtn((Button) findViewById(R.id.pauseBtn));//根据游戏资源包初始化游戏gameView.initWithGamePkg(InnerGameReader.readGame(this, configFile));//开始启动游戏gameView.showStartGameAlert();}protected void onPause() {gameView.pause();super.onPause();}protected void onResume() {gameView.resume();super.onResume();}}LinesContainer.javapackage com.my.cord;import java.util.List;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.graphics.PointF;import android.view.View;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;/*** 设置对图片进行连接的线的宽度和颜色*/public class LinesContainer extends View implements AnimationListener{ private List<PointF> points=null;private final Paint paint=new Paint();private final Path path = new Path();private final AlphaAnimation aa = new AlphaAnimation(1, 0);public LinesContainer(Context context) {super(context);paint.setStyle(Style.STROKE);paint.setStrokeWidth(5);paint.setColor(0xFFFF0000);aa.setDuration(500);aa.setAnimationListener(this);setVisibility(View.GONE);}public void showLines(List<PointF> points){if (points.size()<2) {throw new RuntimeException("点的个数不能小于2");}else{setVisibility(View.VISIBLE);this.points=points;invalidate();startAnimation(aa);}}protected void onDraw(Canvas canvas) {if (points==null||points.size()<2) {return;}path.reset();PointF p=points.get(0);path.moveTo(p.x, p.y);for (int i = 1; i < points.size(); i++) {p=points.get(i);path.lineTo(p.x, p.y);}canvas.drawPath(path, paint);super.onDraw(canvas);}public void onAnimationStart(Animation animation) {}public void onAnimationEnd(Animation animation) { setVisibility(View.GONE);}public void onAnimationRepeat(Animation animation) {} }Config.javapackage com.my.cord;public class Config {private static float cardWidth=0;private static float cardHeight=0;private static float screenWidth=0;private static float screenHeight=0;private static float cardsOffsetX=0;private static float cardsOffsetY=0;/*** 游戏区域的宽度*/private static float gameCardsAreaWidth=0;/*** 游戏区域的高度*/private static float gameCardsAreaHeight=0;/*** 卡片的上边距*/public static final float GAME_CARDS_AREA_TOP=80;/*** 卡片的下边距*/public static final float GAME_CARDS_AREA_BOTTOM=80;/*** 卡片区域左边距*/public static final float GAME_CARDS_AREA_LEFT=0;/*** 卡片区域右边距*/public static final float GAME_CARDS_AREA_RIGHT=0;/*** @return the screenWidth*/public static float getScreenWidth() {return screenWidth;}/*** @param screenWidth the screenWidth to set*/public static void setScreenWidth(float screenWidth) {Config.screenWidth = screenWidth;Config.setGameCardsAreaWidth(Config.getScreenWidth()-Config.GAME_CARDS_AREA_ LEFT-Config.GAME_CARDS_AREA_RIGHT);computeCardWidthAndHeight();}/*** @return the screenHeight*/public static float getScreenHeight() {return screenHeight;}/*** @param screenHeight the screenHeight to set*/public static void setScreenHeight(float screenHeight) {Config.screenHeight = screenHeight;Config.setGameCardsAreaHeight(Config.getScreenHeight()-Config.GAME_CARDS_ARE A_BOTTOM-Config.GAME_CARDS_AREA_TOP);computeCardWidthAndHeight();}private static void computeCardWidthAndHeight(){float cardWidth=Config.getGameCardsAreaWidth()/Level.MAX_H_CARDS_COUNT;floatcardHeight=Config.getGameCardsAreaHeight()/Level.MAX_V_CARDS_COUNT;float min = Math.min(cardWidth, cardHeight);Config.setCardWidth(min);//卡片最小宽Config.setCardHeight(min);//卡片最小高}/*** @return the cardWidth*/public static float getCardWidth() {return cardWidth;}/*** @param cardWidth the cardWidth to set*/private static void setCardWidth(float cardWidth) {Config.cardWidth = cardWidth;}/*** @return the cardHeight*/public static float getCardHeight() {return cardHeight;}/*** @param cardHeight the cardHeight to set*/private static void setCardHeight(float cardHeight) {Config.cardHeight = cardHeight;}/*** @return the cardsOffsetX*/public static float getCardsOffsetX() {return cardsOffsetX;}/*** @param cardsOffsetX the cardsOffsetX to set*/public static void setCardsOffsetX(float cardsOffsetX) { Config.cardsOffsetX = cardsOffsetX;}/*** @return the cardsOffsetY*/public static float getCardsOffsetY() {return cardsOffsetY;}/*** @param cardsOffsetY the cardsOffsetY to set*/public static void setCardsOffsetY(float cardsOffsetY) { Config.cardsOffsetY = cardsOffsetY;}/*** @return the gameCardsAreaWidth*/public static float getGameCardsAreaWidth() {return gameCardsAreaWidth;}/*** @param gameCardsAreaWidth the gameCardsAreaWidth to set */private static void setGameCardsAreaWidth(float gameCardsAreaWidth) { Config.gameCardsAreaWidth = gameCardsAreaWidth;}/*** @return the gameCardsAreaHeight*/public static float getGameCardsAreaHeight() {return gameCardsAreaHeight;}/*** @param gameCardsAreaHeight the gameCardsAreaHeight to set*/private static void setGameCardsAreaHeight(float gameCardsAreaHeight) { Config.gameCardsAreaHeight = gameCardsAreaHeight;}}Picture.javapackage com.my.reader;import android.graphics.Bitmap;/*** Bitmap 面板**/public class Picture {public Picture(Bitmap bitmap) {this.bitmap=bitmap;id=__getId();}public Bitmap getBitmap() {return bitmap;}private int id=0;public int getId() {return id;}private Bitmap bitmap=null;private static int __id=0;private static int __getId(){__id++;return __id;}}算法分析模块程序代码Cardmm.javapackage com.my.cord;/**重排:先遍历当前页面还有的图片,调用随机算法调换页面中图片的位置* 先选中一张图片,获取此图片在垂直和水平方向上的的位置,判断是否被选中,判断当前已选中的图片个数*若选中图片个数小于2张,再选择一张图片,重复上一个动作,若选中图片个数达到2张,判断是否满足消除条件*若满足,则消除,若不满足,则不发生任何变化。
FileZilla客户端源码解析FileZilla客户端源码解析 FTP是TCP/IP协议组的协议,有指令通路和数据通路两条通道。
⼀般来说,FTP标准命令TCP端⼝号是21,Port⽅式数据传输端⼝是20。
FileZilla作为populate open source project,⾃然也有指令通路和数据通路。
然⽽,FileZilla源码极少有注释,⽹上参考资料也寥寥⽆⼏。
FileZilla⽤的到类库多且复杂(客户端wxWeidgets、GnuTLS、sqlite3、GNU IDN Library - Libidn,服务端boost、zlib),模式也不易理解(proxy模式、改编CAsynSocket的CAsynSocketEx、layer等)。
想要完全搞懂FileZilla的细节似乎是件很困难的事情。
好在我只需了解⾥⾯核⼼代码的⼯作原理,能封装为⼰所⽤即可。
FileZilla官⽅论坛回答提问时指出,engine⼯程重点是ControlSocket.h和transfersocket.h,显然,⼀个对应ftp控制,另⼀个对应数据传输。
interface⼯程重点是Mainfrm.h、state.h、commandqueue.h(出于效率考虑,很复杂)。
engine⼯程其他重点类有 CServer, CServerPath, CDirectoryListing, COptionsBase,客户端interface⼯程其他重点类有 COptions。
此外,客户端interface定义了资源⽂件dialog.xrc和menu.xrc(这两个⽤wxWidgets资源编辑器打开。
⽤⽂本打开也可以,内容是xml格式)。
该论坛链接地址为https:///viewtopic.php?f=3&t=8443。
截图如下1 command指令相关1.1 CCommand指令类,头⽂件:commands.h,⼯程:engine,性质:抽象类、虚基类 CCommand及其基类定义了ftp指令实体,是CCommandQueue操作的基本单元。
水利地理信息系统软件(V1.0) 1unit ObjApp;interfaceUsesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Main, Menus, ImgList, OleCtrls, MapXLib_TLB, ExtCtrls, ComCtrls,ToolWin,Db,AdoDB,CommClass,StdCtrls;TypeTApp=Class(TAdoS)privateProcedure LoadObjsToListview(Var Liv:TlistView;var Ado:TAdodataset);publicConstructor Create(AOwner:TComponent);OverRide;procedure CreateCusTool(Var map:TMap);Procedure LoadTv(Var Tv:TTreeview);Procedure LoadType(Var liv:TListView);Procedure LoadObjs(Var Liv:TListView;AType,AManaCode:String);Procedure LoadTypeToComboBox(Var Comb:TCombobox);Procedure LoadQuery(Var Liv:TListView;AType,AMana,ACode,AName:String);Procedure LoadDetial(Var Liv:TListView;AType,ACode,AName,Amana,A TypeName:String);Procedure Loadmap(Var map:TMap);procedure LoadSmallMap(Var Map:TMap);end;implementationuses ObjManaTree, CommApp, DM;{ TApp }constructor TApp.Create(AOwner: TComponent);varSqls:String;beginSqls:='Select Top 1 * from T_App';InHerited Create(Sqls,AOwner);end;procedure TApp.CreateCusTool(var map: TMap);beginMap.CreateCustomTool(CUST_TOOL_POINT , miToolTypePoint , miSelectCursor , miArrowCursor, miArrowCursor, emptyParam);Map.CreateCustomTool(CUST_TOOL_RECT , miToolTypeMarquee , miRectSelectCursor, miArrowCursor, miArrowCursor, emptyParam);Map.CreateCustomTool(CUST_TOOL_CIRCLE , miToolTypeCircle, miRadiusSelectCursor , miArrowCursor, miArrowCursor, emptyParam);end;procedure TApp.LoadDetial(var Liv: TListView; AType, ACode,AName,Amana,ATypeName: String);Sqls,FieldName:String;OObj:TBaseClass;OFields:TAdos;Lt:TListItem;beginOObj:=TbaseClass.Create(Acode,A Type,'F_Code',1);trySqls:='Select * from T_ObjClass where F_Code='''+AType+''' Order by F_ID';OFields:=TAdos.Create(sqls,Nil );tryliv.Items.Clear;Lt:=liv.Items.Add;lt.ImageIndex:=38;Lt.Caption:='编号';lt.SubItems.Add(ACode);Lt:=liv.Items.Add;lt.ImageIndex:=38;Lt.Caption:='名称';lt.SubItems.Add(AName);Lt:=liv.Items.Add;lt.ImageIndex:=38;Lt.Caption:='类别';lt.SubItems.Add(ATypeName);Lt:=liv.Items.Add;lt.ImageIndex:=38;Lt.Caption:='所在地';lt.SubItems.Add(AMana);while not OFields.Eof dobeginLt:=Liv.Items.Add;lt.ImageIndex:=38;lt.Caption:=Ofields.fieldbyname('F_Note').AsString;FieldName:=Ofields.fieldbyname('F_FName').AsString;lt.SubItems.Add(GetFieldvalue(OObj.cAdo,Fieldname));OFields.Next;end;finallyOFields.Close;OFields.Free;end;finallyOObj.Free;end;end;procedure TApp.Loadmap(var map: TMap);varFn:String;Ol:Tados;fn:=MapPath+'\'+fieldByname('F_Gst').AsString;map.GeoSet:=fn;map.Title.Visible :=false;//装入标注图层Ol:=Tados.Create('select * From T_BindLayer where F_ShowLabel=1',nil); trymap.DataSets.RemoveAll;while not Ol.Eof dobeginLabelLayer( map,Dm.DataModule1.ADOConnection1,ol.fieldbyname('F_BindLayername').AsString ,ol.fieldbyname('F_DsName').AsString ,ol.fieldbyname('F_Sql').AsString ,ol.fieldbyname('F_Key').AsString ,ol.fieldbyname('F_Cap').AsString );Ol.Next;end;finallyOl.Close;Ol.Free;end;end;procedure TApp.LoadObjs(var Liv: TListView; AType, AManaCode: String); varSqls:String;OObjs:TAdos;Lt:TListItem;beginSqls:='select * from V_objs where '+'F_Type In('+AType+') and '+'F_XiangCode='''+AManaCode+''' '+'Order by F_Type Desc,F_Code';OObjs:=TAdos.Create(sqls,Nil);tryLoadObjsToListview(liv,TAdoDataset(OOBJS));finallyOObjs.Close;OObjs.Free;end;end;procedure TApp.LoadObjsToListview(var Liv: TlistView;var Ado: TAdodataset);varLt:TListItem;beginLiv.Items.Clear;while not ado.Eof doLt:=Liv.Items.Add;lt.ImageIndex:=37;lt.Caption:=GetFieldvalue(TAdoquery(Ado),'F_Code');Lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_Name'));Lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_TypeName'));Lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_XiangName'));lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_Type'));Ado.Next;end;end;procedure TApp.LoadQuery(var Liv: TListView; AType,AMana,ACode, AName: String); varsqls,tj:String;Lt:TlistItem;Otype,OObjs:TAdos;beginsqls:='select * from V_Objs ';tj:='';//类型if Atype<> '全部对象' thenbeginOtype:=Tados.Create('select top 1 * From T_ObjClass where F_Name='''+AType+'''',Nil);trytj:=tj+'F_Type='''+Otype.fieldbyname('F_Code').AsString+''' and ';finallyOtype.Close;Otype.Free;end;end;//管理区域if AMana<>'-1' thentj:=tj+'F_XiangCode ='''+trim(AMana)+''' And ';//编号if ACode<>'-1' thentj:=tj+'F_Code like ''%'+trim(ACode)+'%'' And ';//名称if AName<>'-1' thentj:=tj+'F_Name like ''%'+trim(AName)+'%'' And ';if tj<>'' thenbegintj:=copy(tj,1,length(tj)-4);Sqls:=sqls+' where '+tj;end ;Sqls:=sqls+' Order By F_Type Desc,F_Code';//生成查询记录OObjs:=Tados.Create(sqls,nil);tryLoadObjsToListview(Liv,TAdoDataset(OObjs ));finallyOObjs.Close;OObjs.Free;end;end;procedure TApp.LoadSmallMap(var Map: TMap);varFn:String;beginfn:=MapPath+'\Small'+fieldByname('F_Gst').AsString;map.GeoSet:=fn;map.Title.Visible :=false;end;procedure TApp.LoadTv(var Tv: TTreeview);varOMaShi,OMaXian,OMaXiang:TAdos;sqls:String;NkShi,NkXian,NkXiang:NodeKey;Rd,RdShi,RdXian,RdXiang:TTreenode;i:Integer;beginsqls:='select * from V_Manatree where F_Level=0';//市OMaShi:=TAdos.Create(sqls,Nil);TryTv.Items.Clear ;while not OMaShi.Eof dobeginnew(NkShi);NkShi.F_Key:=GetFieldvalue(TAdoquery(OMaShi),'F_Code');NkShi.F_Caption:=GetFieldvalue(TAdoquery(OMaShi),'F_Name');NkShi.F_TypeName:=GetFieldvalue(TAdoquery(OMaShi),'F_Type');NkShi.F_Level:=GetFieldvalue(TAdoquery(OMaShi),'F_Level');RdShi:=tv.Items.AddObject(nil,NkShi.F_Caption,NkShi);//县Sqls:='select * from V_Manatree where F_Level=1 and F_PareKey='+''''+GetFieldvalue(TAdoquery(OMaShi),'F_Code')+'''';OMaXian:=TAdos.Create(sqls,nil);trywhile not OMaXian.Eof dobeginnew(NkXian);NkXian.F_Key:=GetFieldvalue(TAdoquery(OMaXian),'F_Code');NkXian.F_Caption:=GetFieldvalue(TAdoquery(OMaXian),'F_Name');NkXian.F_TypeName:=GetFieldvalue(TAdoquery(OMaXian),'F_Type');NkXian.F_Level:=GetFieldvalue(TAdoquery(OMaXian),'F_Level');RdXian:=tv.Items.AddChildObject(RdShi,NkXian.F_Caption,NkXian);//乡Sqls:='select * from V_Manatree where F_Level=2 and F_PareKey='+''''+GetFieldvalue(TAdoquery(OMaXian),'F_Code')+'''';OMaXiang:=TAdos.Create(sqls,nil);trywhile not OMaXiang.Eof dobeginnew(NkXiang);NkXiang.F_Key:=GetFieldvalue(TAdoquery(OMaXiang),'F_Code');NkXiang.F_Caption:=GetFieldvalue(TAdoquery(OMaXiang),'F_Name');NkXiang.F_TypeName:=GetFieldvalue(TAdoquery(OMaXiang),'F_Type');NkXiang.F_Level:=GetFieldvalue(TAdoquery(OMaXiang),'F_Level');RdXiang:=tv.Items.AddChildObject(RdXian,NkXiang.F_Caption,NkXiang);OMaXiang.Next;end;finallyOMaXiang.Close;OMaXiang.Free;end;OMaXian.Next;end;finallyOMaxian.Close;OMaxian.Free;end;OMaShi.Next;end;finallyOMaShi.Free;end;For i:=0 to Tv.Items.Count-1 dobegintv.Items[i].ImageIndex:=37;tv.Items[i].SelectedIndex:=38;tv.Items[i].Expanded:=false;end;Tv.Items[0].Expanded:=true;end;procedure TApp.LoadType(var liv: TListView);varLt:TListItem;OType:TAdos;sqls:String;beginsqls:='select distinct F_Code,F_name from T_ObjClass order by F_Code Desc';Otype:=Tados.Create(sqls,Nil);tryLiv.Items.Clear;while not OType.Eof do7 beginLt:=Liv.Items.Add;lt.ImageIndex:=4;Lt.Caption:=OType.fieldByname('F_Name').AsString;Lt.SubItems.Add(OType.fieldByname('F_Code').AsString);Lt.Checked:=true;OType.Next;end;finallyOType.Close;OType.Free;end;end;procedure TApp.LoadTypeToComboBox(var Comb: TCombobox);varOTypes:TAdos;beginOTypes:=Tados.Create('select Distinct F_Code,F_Name From T_ObjClass Order By F_Code Desc',Nil);tryComB.Items.Clear;Comb.Items.Add('全部对象');While not OTypes.Eof dobeginCOmB.Items.Add(OTypes.fieldByname('F_Name').AsString);OTypes.Next;end;finallyOTypes.Close;OTypes.Free;end;end;end.unit UnitFrmMain;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Main, Menus, ImgList, OleCtrls, MapXLib_TLB, ExtCtrls, ComCtrls,ToolWin, StdCtrls, Buttons,adodb,db;typeTFrmMainNtWater = class(TFrmMain)PageControl3: TPageControl;tabObjs: TTabSheet;TabSheet4: TTabSheet;lisDet: TListView;Splitter4: TSplitter;lisObjs: TListView;lisDetSelect: TListView;lisType: TListView;Splitter5: TSplitter;TabSheet3: TTabSheet;Label1: TLabel;comType: TComboBox;chkCode: TCheckBox;edtCode: TEdit;chkName: TCheckBox;edtName: TEdit;BitBtn1: TBitBtn;Splitter6: TSplitter;lisQuery: TListView;Splitter7: TSplitter;lisQueryDet: TListView;chkMana: TCheckBox;Map2: TMap;N19: TMenuItem;N20: TMenuItem;lisSelect: TListView;Splitter8: TSplitter;procedure FormCreate(Sender: TObject);procedure N2Click(Sender: TObject);procedure TvClick(Sender: TObject);procedure lisTypeClick(Sender: TObject);procedure BitBtn1Click(Sender: TObject);procedure lisObjsClick(Sender: TObject);procedure lisQueryClick(Sender: TObject);procedure Map1Error(ASender: TObject; Number: Smallint;var Description: WideString; Scode: Integer; const Source,HelpFile: WideString; HelpContext: Integer;var CancelDisplay: WordBool);procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Map1MapDraw(ASender: TObject; Flag: Smallint);procedure Map2MouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);procedure N20Click(Sender: TObject);procedure lisObjsDblClick(Sender: TObject);procedure lisQueryDblClick(Sender: TObject);procedure N13Click(Sender: TObject);procedure N16Click(Sender: TObject);procedure N18Click(Sender: TObject);procedure N17Click(Sender: TObject);procedure Map1ToolUsed(ASender: TObject; ToolNum: Smallint; X1, Y1, X2, Y2, Distance: Double; Shift, Ctrl: WordBool;var EnableDefault: WordBool);procedure lisSelectClick(Sender: TObject);procedure lisDetDblClick(Sender: TObject);procedure lisDetSelectDblClick(Sender: TObject);procedure lisQueryDetDblClick(Sender: TObject);procedure lisObjsChange(Sender: TObject; Item: TListItem;Change: TItemChange);procedure lisSelectChange(Sender: TObject; Item: TListItem;Change: TItemChange);procedure lisQueryChange(Sender: TObject; Item: TListItem;Change: TItemChange);private{ Private declarations }publiceditType,editCode:String;{ Public declarations }procedure SetSmallMap;procedure SetMainMap(x,y:Integer);end;varSave8087cw:Word;FrmMainNtWater: TFrmMainNtWater;implementationuses ObjApp, CommApp, ObjT_Qiao, ObjT_Hedao, ObjT_Gaodihan, CommClass, ObjT_Zha;{$R *.dfm}procedure TFrmMainNtWater.FormCreate(Sender: TObject);V AROapp:TApp;begininherited;//Save8087cw:=Default8087cw;//Oapp:=Tapp.Create(nil);tryCaption:=Oapp.fieldbyName('F_Title').AsString;StatusBar1.Panels[0].Text:=Oapp.fieldbyName('F_StatusBar').AsString;Oapp.LoadType(LisType);Oapp.LoadTypeToComboBox(comType);Oapp.Loadmap(map1);Oapp.LoadSmallMap(map2);Comtype.ItemIndex:=0;Oapp.CreateCusTool(map1);finallyOApp.Close;Oapp.Free;end;N2.OnClick(self);end;procedure TFrmMainNtWater.N2Click(Sender: TObject);varOapp:TApp;begininherited;oApp:=Tapp.Create(nil);tryOapp.LoadTv(Tv);finallyOApp.Close;OApp.Free;end;end;procedure Click(Sender: TObject);VarOapp:TApp;Ofe:TFeature;i:integer;Lt:TListItem;TypeStr:String;begininherited;if Tv.Selected=nil thenexit;chkMana.Caption:=tv.Selected.Text+'范围内查询';chkMana.Visible:=true;Oapp:=Tapp.Create(nil);tryTypeStr:='';for i:=0 to Listype.Items.Count-1 dobeginLt:=LisType.Items[i];if lt.Checked thenTypeStr:=TypeStr+''''+lt.SubItems[0]+''',';end;if TypeStr<>'' thenTypeStr:=copy(TypeStr,1,length(TypeStr)-1);Oapp.LoadObjs(LisObjs,TypeStr,NodeKey(Tv.Selected.data).F_Key); finallyOApp.Close;OApp.Free;end;Ofe:=TFeature.Create(NodeKey(Tv.Selected.data).F_Key,NodeKey(Tv.Selected.data).F_TypeName ,'F_Code',nil);tryif ofe.MoveMap(map1)=0 thenMessageBox(Handle,' 未记录坐标!','提示',MB_OK); finallyOfe.Close;Ofe.Free ;end;PageControl3.ActivePage:=tabObjs;end;procedure TFrmMainNtWater.lisTypeClick(Sender: TObject); begininherited;Tv.OnClick(nil);end;procedure TFrmMainNtWater.BitBtn1Click(Sender: TObject); varvType,vMana,vCode,vname:String;OApp:TAPP;begininherited;vType:=comType.Items[comType.ItemIndex];if chkCode.Checked thenvCode:=edtCode.TextelsevCode:='-1';vmana:='-1';if tv.Selected<> nil thenif chkMana.Checked thenvMana:=NodeKey(tv.Selected.data).F_Key;if chkName.Checked thenvName:=edtname.TextelsevName:='-1';OApp:=TApp.Create(nil);tryOapp.LoadQuery(LisQuery,vtype,vMana,vCode,vName); finallyOApp.Close;OApp.Free;end;end;procedure TFrmMainNtWater.lisObjsClick(Sender: TObject); varOApp:TApp;Item:TListItem;begininherited;if lisObjs.Selected<>nil thenbeginItem:=LisObjs.Selected;OApp:=Tapp.Create(nil);tryOapp.LoadDetial(LisDet,Item.SubItems[3],Item.Caption,Item.SubItems[0],Item.SubItems[2],Item.SubItems[1]);finallyOapp.Close;OApp.Free;end;edittype:=item.SubItems[item.SubItems.count-1];editcode:=item.Caption;end;end;procedure TFrmMainNtWater.lisQueryClick(Sender: TObject);varOApp:TApp;Item:TListItem;begininherited;if lisQuery.Selected<>nil thenbeginItem:=lisQuery.Selected;OApp:=Tapp.Create(nil);tryOapp.LoadDetial(LisQueryDet,Item.SubItems[3],Item.Caption,Item.SubItems[0],Item.SubItems[2],Item.SubItems[1]);finallyOapp.Close;OApp.Free;end;edittype:=item.SubItems[item.SubItems.count-1];editcode:=item.Caption;end;end;procedure TFrmMainNtWater.Map1Error(ASender: TObject; Number: Smallint; var Description: WideString; Scode: Integer; const Source,HelpFile: WideString; HelpContext: Integer; var CancelDisplay: WordBool); begininherited;CancelDisplay:=true;end;procedure TFrmMainNtWater.FormClose(Sender: TObject;var Action: TCloseAction);begininherited;yers.RemoveAll ;//Map1.Free;Set8087cw(Save8087cw);end;procedure TFrmMainNtWater.SetSmallMap;varf:Feature;L:layer;i:integer;pt:Point;pts:Points;beginfor i:=1 to yers.Count doif yers.Item[i].Name='rect' thenbeginyers.Remove(i);break;end;l:=yers.CreateLayer('rect',emptyparam,emptyparam,emptyparam,emptyparam);pt:=copoint.Create;pts:=copoints.Create;pt.Set_(map1.Bounds.XMin,map1.Bounds.YMin);pts.Add(pt,emptyparam);pt.Set_(map1.Bounds.XMax,map1.Bounds.YMin);pts.Add(pt,emptyparam);pt.Set_(map1.Bounds.XMax,map1.Bounds.YMax);pts.Add(pt,emptyparam);pt.Set_(map1.Bounds.XMin,map1.Bounds.YMax);pts.Add(pt,emptyparam);f:=map2.FeatureFactory.CreateRegion(pts,map2.DefaultStyle);f.Style.RegionPattern:= miPatternNoFill;f.Style.RegionBorderColor:=miColorRed;l.Editable:=true;l.AddFeature(f,emptyparam);l.Editable:=false;l.Refresh;end;procedure TFrmMainNtWater.Map1MapDraw(ASender: TObject; Flag: Smallint); varOApp:TApp;begininherited;if map1.Zoom <3 thenmap1.ZoomTo(3.2,map1.CenterX ,map1.CenterY );if map1.Zoom>240 thenbeginOapp:=TApp.Create(nil);tryoapp.Loadmap(map1);14finallyoapp.Close;oapp.Free;end;end;SetSmallMap ;statusbar1.Panels[2].Text :=Format('%.3f', [Map1.zoom]);statusbar1.Panels[4].Text :=Format('(%0:.3f,%1:.3f)', [Map1.centerX,Map1.centerY]); //''''x=1312'''' //使用索引// Format(''''(%.3f,%.3f)'''', [Map1.centerX,Map1.centerY]);end;procedure TFrmMainNtWater.SetMainMap(x,y:Integer);varsx,sy:single;mx,my:double;beginsx:=x;sy:=y;map2.ConvertCoord(sx,sy,mx,my,1);map1.ZoomTo(map1.Zoom,mx,my);end;procedure TFrmMainNtWater.Map2MouseUp(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begininherited;SetMainMap(x,y);end;procedure TFrmMainNtWater.N20Click(Sender: TObject);varOq:TQiao;Oh:THedao;Og:TGaodihan;Oz:TZHA;begininherited;if ((editType='') or (editcode='')) thenbeginMessageBox(Handle,' 请选择要编辑的对象','提示',MB_OK);end;//MessageBox(Handle,pchar(editType+','+editcode),'提示',MB_OK);if UpperCase(editType)='T_QIAO' thenbeginOq:=TQiao.Create(editcode);tryoq.ShowData;edittype:='';editcode:='';oq.Close;oq.Free;end;end;if pos('V_HEDAO',UpperCase(editType))>0 thenbeginOh:=THedao.Create(editcode);tryOh.ShowData;finallyedittype:='';editcode:='';Oh.Close;Oh.Free;end;end;if pos('T_GAODIHAN',UpperCase(editType))>0 thenbeginOg:=TGAODIHAN.Create(editcode);tryOg.ShowData;finallyedittype:='';editcode:='';Og.Close;Og.Free;end;end;if pos('T_ZHA',UpperCase(editType))>0 thenbeginOz:=TZHA.Create(editcode);tryOz.ShowData;finallyedittype:='';editcode:='';Oz.Close;Oz.Free;end;end;end;procedure TFrmMainNtWater.lisObjsDblClick(Sender: TObject); varOfe:TFeature;lt:TListItem;begininherited;if TListView(Sender).Selected <>nil thenlt:= TListView(Sender).Selected ;Ofe:=TFeature.Create(lt.Caption ,lt.SubItems[lt.SubItems.count-1],'F_Code',nil);tryif ofe.MoveMap(map1)=0 thenMessageBox(Handle,' 未记录坐标!','提示',MB_OK);finallyOfe.Close;Ofe.Free ;end;end;end;procedure TFrmMainNtWater.lisQueryDblClick(Sender: TObject);varOfe:TFeature;lt:TListItem;begininherited;if TListView(Sender).Selected <>nil thenbeginlt:= TListView(Sender).Selected ;Ofe:=TFeature.Create(lt.Caption ,lt.SubItems[lt.SubItems.count-1],'F_Code',nil);tryif ofe.MoveMap(map1)=0 thenMessageBox(Handle,' 未记录坐标!','提示',MB_OK);finallyOfe.Close;Ofe.Free ;end;end;end;procedure TFrmMainNtWater.N13Click(Sender: TObject);begininherited;map1.CurrentTool:=miArrowTool ;end;procedure TFrmMainNtWater.N16Click(Sender: TObject);begininherited;map1.CurrentTool:=CUST_TOOL_POINT;end;procedure TFrmMainNtWater.N18Click(Sender: TObject);inherited;map1.CurrentTool:=CUST_TOOL_CIRCLE;end;procedure TFrmMainNtWater.N17Click(Sender: TObject);begininherited;map1.CurrentTool:=CUST_TOOL_RECT;end;procedure TFrmMainNtWater.Map1ToolUsed(ASender: TObject; ToolNum: Smallint;X1, Y1, X2, Y2, Distance: Double; Shift, Ctrl: WordBool;var EnableDefault: WordBool);varl,lxz:Layer;i,j:Integer;r:real;f,fxz:Feature;// fxzS:Featurs;FCode,FType,FXZMC,selectSQL:String;pt:Point;OXZ:TOBJ;Ado:TAdos;lt:TListitem;begininherited;//点选对象if (toolnum=CUST_TOOL_POINT) OR (toolnum=CUST_TOOL_RECT) OR(toolnum=CUST_TOOL_CIRCLE) thenBEGIN//清除上次选中的对象for i:=1 to yers.Count dobeginl:=yers.Item[i];if l.Selectable thenl.Selection.ClearSelection ;end;//点选对象if toolnum=CUST_TOOL_POINT thenbeginfor i:=1 to yers.Count dobeginl:=yers.Item[i];if not l.Selectable thencontinue;if l.ZoomLayer thenif (map1.zoom >=l.ZoomMin) and (map1.Zoom<l.ZoomMax ) thenl.Selection.SelectByPoint( x2, y2, miSelectionAppend ,emptyparam);IF NOT L.ZoomLayer THENl.Selection.SelectByPoint( x2, y2, miSelectionAppend ,emptyparam);if l.Selection.count>0 thenbegin// showmessage(inttostr(l.Selection.Count ));break;end;end;end;//框选对象if toolnum=CUST_TOOL_RECT thenbeginfor i:=1 to yers.Count dobeginl:=yers.Item[i];if not l.Selectable thencontinue;if l.ZoomLayer thenif (map1.zoom >=l.ZoomMin) and (map1.Zoom<l.ZoomMax ) thenl.Selection.SelectByRectangle(x1,y1,x2,y2,miSelectionAppend );IF NOT L.ZoomLayer THENl.Selection.SelectByRectangle(x1,y1,x2,y2,miSelectionAppend );end;end;//圈选对象if toolnum=CUST_TOOL_CIRCLE thenbeginfor i:=1 to yers.Count dobeginl:=yers.Item[i];if not l.Selectable thencontinue;if l.ZoomLayer thenif (map1.zoom >=l.ZoomMin) and (map1.Zoom<l.ZoomMax ) thenl.Selection.SelectByRadius(x1,y1,Distance,miSelectionAppend );IF NOT L.ZoomLayer THENl.Selection.SelectByRadius(x1,y1,Distance,miSelectionAppend );end;end;//显示选中对象信息lisSelect.Items.Clear ;for i:=1 to yers.Count dobeginl:=yers.Item[i];selectSQL:='';if l.Selectable thenbeginl:=yers.Item[i];for j:=1 to l.Selection.Count dobeginf:=l.Selection.Item[j];FCode:=f.KeyValue ;FType:= ;FXZMC:='';//根据对象的坐标,找出乡镇的名称lxz:=yers.Item['乡镇'] ;pt:=copoint.Create;pt.Set_(f.CenterX ,f.CenterY );if lxz.SearchAtPoint(pt,miSearchResultRegion).Count >0 thenbeginfxz:=lxz.SearchAtPoint(pt,miSearchResultRegion).Item[1];FXZMC:=fxz.KeyValue ;end;if pos('级河',)> 0 thenselectSQL:='Select * from V_Objs where F_Code='''+FCode+''' and '+'F_TypeName='''+FType+''' and '+'F_XiangCode='''+FXZMC+''''elseselectSQL:='Select * from V_Objs where F_Code='''+FCode+''' and '+'F_TypeName='''+FType+''' ';Ado:=TAdos.Create(selectSQL,nil);trywhile not ado.Eof dobeginlt:=lisSelect.Items.Add;lt.ImageIndex:=37;lt.Caption:=GetFieldvalue(TAdoquery(Ado),'F_Code');Lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_Name'));Lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_TypeName'));Lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_XiangName'));lt.SubItems.Add(GetFieldvalue(TAdoquery(Ado),'F_Type'));Ado.Next;end;finallyAdo.Close;ado.Free;end;end;end;end;PageControl3.ActivePage:=TabSheet4;END;end;procedure TFrmMainNtWater.lisSelectClick(Sender: TObject);varOApp:TApp;Item:TListItem;begininherited;if lisSelect.Selected<>nil thenbeginItem:=lisSelect.Selected;OApp:=Tapp.Create(nil);tryOapp.LoadDetial(lisDetSelect,Item.SubItems[3],Item.Caption,Item.SubItems[0],Item.SubItems[2],Item.SubItems[1]);finallyOapp.Close;OApp.Free;end;edittype:=item.SubItems[item.SubItems.count-1];editcode:=item.Caption;end;end;procedure TFrmMainNtWater.lisDetDblClick(Sender: TObject);varItem:TListItem;begininherited;IF LisDet.Items.Count > 0 thenbeginItem:=lisObjs.Selected ;edittype:=item.SubItems[item.SubItems.count-1];editcode:=item.Caption;n20.OnClick(nil);end;end;procedure TFrmMainNtWater.lisDetSelectDblClick(Sender: TObject); varItem:TListItem;begininherited;IF LisDetSelect.Items.Count > 0 thenbeginItem:=LisSelect.Selected ;edittype:=item.SubItems[item.SubItems.count-1];editcode:=item.Caption;n20.OnClick(nil);end;end;procedure TFrmMainNtWater.lisQueryDetDblClick(Sender: TObject); varItem:TListItem;begininherited;IF LisQueryDet.Items.Count > 0 thenbeginItem:=LisQuery.Selected ;edittype:=item.SubItems[item.SubItems.count-1];editcode:=item.Caption;n20.OnClick(nil);end;end;procedure TFrmMainNtWater.lisObjsChange(Sender: TObject; Item: TListItem; Change: TItemChange);begininherited;lisDet.Items.Clear ;end;procedure TFrmMainNtWater.lisSelectChange(Sender: TObject; Item: TListItem; Change: TItemChange);begininherited;lisDetSelect.Items.Clear ;end;procedure TFrmMainNtWater.lisQueryChange(Sender: TObject; Item: TListItem; Change: TItemChange);begininherited;lisQueryDet.Items.Clear ;end;end.unit ObjT_Qiao;interfaceUsesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Main, Menus, ImgList, OleCtrls, MapXLib_TLB, ExtCtrls, ComCtrls, ToolWin,Db,AdoDB,CommClass,StdCtrls,UnitFrmEditT_Qiao;typeTQiao=class(TObj)privateEForm:TForm;publicConstructor Create(Code:String);OverLoad;Constructor Free;function GetSelfValue(Fieldname:String):String;procedure ShowData;end;implementation{ TQiao }constructor TQiao.Create(Code: String);begininherited Create(Code,'T_Qiao','F_Code',nil);eform:=TFrmEditT_Qiao.Create(nil);TFrmEditT_Qiao(EForm).Code :=code;TFrmEditT_Qiao(EForm).Caption:=fieldbyname('F_name').AsString ;end;constructor TQiao.Free;begineform.Close;eform.Free;end;function TQiao.GetSelfValue(Fieldname: String): String;beginif fieldbyname(fieldname).IsNull thenresult:=''elseresult:=fieldbyname(fieldname).AsString;end;procedure TQiao.ShowData;beginTFrmEditT_Qiao(EForm).edtF_Code.Text :=GetSelfValue('F_Code');TFrmEditT_Qiao(EForm).edtF_Name.Text :=GetSelfValue('F_Name');TFrmEditT_Qiao(EForm).edtF_xiangcode.Text :=GetSelfValue('F_xiangcode');TFrmEditT_Qiao(EForm).edtF_Leixing.Text :=GetSelfValue('F_Leixing');TFrmEditT_Qiao(EForm).edtF_hedaoname.Text :=GetSelfValue('F_hedaoname');TFrmEditT_Qiao(EForm).edtF_hedaojibie.Text :=GetSelfValue('F_hedaojibie');TFrmEditT_Qiao(EForm).edtF_jinkuan.Text :=GetSelfValue('F_jinkuan');TFrmEditT_Qiao(EForm).edtF_Long.Text :=GetSelfValue('F_Long');TFrmEditT_Qiao(EForm).edtF_Jiegou.Text :=GetSelfValue('F_Jiegou');TFrmEditT_Qiao(EForm).edtF_Hezai.Text :=GetSelfValue('F_Hezai');TFrmEditT_Qiao(EForm).edtF_Jianli.Text :=GetSelfValue('F_Jianli');TFrmEditT_Qiao(EForm).edtF_Memo.Text :=GetSelfValue('F_Memo'); eForm.ShowModal;end;end.unit CommApp;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,AdoDB,DB,StdCtrls, OleCtrls, MapXLib_TLB,ExtCtrls,ComCtrls;//常量定义Const//企业编号常量CompanyCode='0001';//应用程序编号APPLICATIONCODE='0001';//自定义工具编号CUST_TOOL_POINT=1;CUST_TOOL_RECT=2;CUST_TOOL_CIRCLE=3;。
vb udp源程序实例子以下是一个简单的 UDP源程序的示例代码:```vbImports Imports .SocketsModule Module1Sub Main()' 定义UDP客户端Dim client As New UdpClient()' 设置服务器IP和端口Dim serverIP As IPAddress = IPAddress.Parse("127.0.0.1") Dim serverPort As Integer = 12345' 创建发送的字节数组Dim message As Byte() = Encoding.ASCII.GetBytes("Hello, UDP Server!")' 发送消息到服务器client.Send(message, message.Length, NewIPEndPoint(serverIP, serverPort))' 关闭UDP客户端client.Close()Console.WriteLine("UDP消息发送完成。
")Console.ReadKey()End SubEnd Module```该代码主要实现了一个UDP客户端,通过指定服务器的IP地址和端口号,发送一个消息给服务器。
在这个示例中,我们使用本地回环地址 127.0.0.1 和端口号 12345 来模拟服务器的IP 和端口。
要使此示例工作,你需要在此代码之前启动一个UDP服务器来接收消息。
你可以通过创建一个新的控制台应用程序项目,并使用类似以下示例的代码实现UDP服务器:```vbImports Imports .SocketsModule Module1Sub Main()' 定义UDP服务器监听的端口号Dim serverPort As Integer = 12345' 创建UDP服务器Dim server As New UdpClient(serverPort)Console.WriteLine("等待UDP消息...")' 接收来自客户端的消息Dim clientAddress As IPEndPoint = NewIPEndPoint(IPAddress.Any, serverPort)Dim receivedBytes As Byte() = server.Receive(clientAddress) Dim message As String =Encoding.ASCII.GetString(receivedBytes)Console.WriteLine("收到来自客户端的消息:{0}", message)' 关闭UDP服务器server.Close()Console.WriteLine("UDP服务器关闭。
C/S客户端程序public partial class student : Form{ // 定义类变量private Thread serverThread;//定义服务器线程private Thread recvThread;private Thread sendThread;private TcpClient my_tcpClient; //定义客户tcp对象private NetworkStream networkstream; //定义网络流I/O对象private StreamReader streamreader;private StreamWriter streamwriter;//请求连接方法private void Connection() //定义客户端连接服务器函数{try{IPAddress ipaddress = IPAddress.Parse(text_ip.Text);// 文本框内容赋予变量ipaddressInt32 port = Int32.Parse(text_port.Text); //有效数据16位整数my_tcpClient = new TcpClient(); //实例化请求连接对象my_tcpClient.Connect(ipaddress,port);//连接远程主机(教师机)//一般应根据对象的属性connected==true判断是否连接好listBox1.Items.Add("学生机成功连接上教师机!!");button_send.Enabled = true;button_stop.Enabled = true;button_up.Enabled = false;networkstream = my_tcpClient.GetStream();streamreader = new StreamReader(networkstream);streamwriter = new StreamWriter(networkstream);recvThread = new Thread(new ThreadStart(RecvData));//蓝字体是为RecvData函数定义委托recvThread.Start();}catch (Exception exc){ MessageBox.Show(exc.Message, "学生机提示!"); }}private void RecvData()//定义接收数据函数{string msg = streamreader.ReadLine(); //从当前流中读取一行字符并将数据作为字符串返回while (!msg.Equals("exit")) // 如果接收到的教师机信息不是"exit",就不断接收信息{listBox1.Items.Add("教师回答:" + msg);msg = streamreader.ReadLine();}button_up.Enabled = true;button_stop.Enabled = false;button_send.Enabled = false;listBox1.Items.Add("教师机关闭!");ReleaseResource(); //释放资源和所使用的对象}private void Send_data()//定义发送数据函数(方法){if (text_msg.Text != ""){listBox1.Items.Add("学生说:" + text_msg.Text);streamwriter.WriteLine(text_msg.Text); //往当前的数据潮中写入一行字符串,发送数据。
C#实现的Socket服务器端、客户端代码分享服务端:using System;using System.Collections.Generic;using ;using .Sockets;using System.Text;namespace Server{class Program{static void Main(string[] args){Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"),55555);try{server.Bind(point);server.Listen(10);//监听本地端⼝System.Console.WriteLine("开始监听本地端⼝:55555");while (true){Socket sock = server.Accept();byte[] buffer = new byte[1024 * 1024];int n = sock.Receive(buffer);String cmd = Encoding.UTF8.GetString(buffer, 0, n);String result = execCmd(cmd);byte[] bytes = Encoding.UTF8.GetBytes(result);sock.Send(bytes);}}catch (Exception ex){System.Console.WriteLine(ex.Message);return;}}//重定向输⼊输出流,并且⽤cmd执⾏命令private static String execCmd(String cmd){System.Diagnostics.Process p = new System.Diagnostics.Process();p.StartInfo = new System.Diagnostics.ProcessStartInfo();p.StartInfo.FileName = "cmd.exe";p.StartInfo.Arguments ="/c "+cmd;//隐藏程序外壳p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//在这⾥重定向输出即可,因为不是交互式的,如果需要交互式的直接反弹cmd即可p.StartInfo.RedirectStandardOutput = true;eShellExecute = false;p.StartInfo.CreateNoWindow = true;p.Start();return p.StandardOutput.ReadToEnd();}}}客户端:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using ;using .Sockets;using System.Text;using System.Threading;using System.Windows.Forms;/** Code By iswin*/namespace Client{public partial class main : Form{public main(){InitializeComponent();this.ip.Text="127.0.0.1";this.cmd.Text="ipconfig";this.port.Text = "55555";}private void send_Click(object sender, EventArgs e){Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); String remoteip=this.ip.Text;String command = this.cmd.Text;IPAddress ip = IPAddress.Parse(remoteip);IPEndPoint point=new IPEndPoint(ip,int.Parse(port.Text));try{this.recvmsg.Text = "开始连接服务端:" + remoteip + ":" + port.Text + "\n";client.Connect(point);this.recvmsg.Text="连接服务端!\n给服务端发送指令:"+command;byte[] buffer = Encoding.UTF8.GetBytes(command);//讲输⼊的指令发送到服务端client.Send(buffer);//接受服务端返回的数据recvmsgs(client);client.Close();}catch (Exception ex){this.recvmsg.Text = ex.Message;MessageBox.Show(ex.Message);return;}}//接受服务端发送来的消息private void recvmsgs(Socket client){try{byte[] buffer = new byte[1024 * 1024];int size = client.Receive(buffer);String recv = Encoding.UTF8.GetString(buffer, 0, size);this.recvmsg.Text = "\n" + recv;}catch (Exception ex){MessageBox.Show(ex.Message);return;}}}}。
UDP服务器客户端代码⽰例UDP服务器代码:1 #include <errno.h>2 #include <string.h>3 #include <stdlib.h>4 #include <sys/types.h>5 #include <sys/socket.h>6 #include <netinet/in.h>7 #include <arpa/inet.h>8 #include <iostream>910using namespace std;1112int main(int argc, char *argv[])13 {14if (argc != 3)15 {16 cout << "usage: " << argv[0] << " ip port" << endl;17return -1;18 }1920char *szIp = argv[1];21 in_addr_t iIp = inet_addr(szIp);22if (iIp == INADDR_NONE)23 {24 cerr << "fail to parse ip: " << szIp << endl;25return -1;26 }27char *pEnd = NULL;28 uint16_t usPort = strtoul(argv[2], &pEnd, 10);29if (*pEnd != '\0')30 {31 cerr << "fail to parse port: " << argv[2] << endl;32return -1;33 }3435int iSockFd = socket(AF_INET, SOCK_DGRAM, 0);36if (iSockFd < 0)37 {38 cerr << "fail to create socket, err: " << strerror(errno) << endl;39return -1;40 }41 cout << "create socket fd " << iSockFd << endl;4243 sockaddr_in oAddr;44 memset(&oAddr, 0, sizeof(oAddr));45 oAddr.sin_family = AF_INET;46 oAddr.sin_addr.s_addr = iIp;47 oAddr.sin_port = htons(usPort);48if (bind(iSockFd, (sockaddr *)&oAddr, sizeof(oAddr)) < 0)49 {50 cerr << "fail to bind addr " << szIp << ":" << usPort << ", err: " << strerror(errno) << endl;51return -1;52 }53 cout << "bind addr " << szIp << ":" >> usPort << endl;5455 uint8_t acRecvBuf[64 * 1024];56while (true)57 {58 sockaddr_in oClientAddr;59 socklen_t iAddrLen = sizeof(oClientAddr);60 ssize_t iRecvLen = recvfrom(iSockFd, acRecvBuf, sizeof(acRecvBuf), 0, (sockaddr *)&oClientAddr, &iAddrLen);61if (iRecvLen < 0)62 {63 cerr << "fail to recv, err: " << strerror(errno) << endl;64continue;65 }66 cout << "recv data from " << inet_ntoa(oClientAddr.sin_addr) << ":" << ntohs(oClientAddr.sin_port) << ", len: " << iRecvLen << endl; 6768 ssize_t iSendLen = sendto(iSockFd, acRecvBuf, iRecvLen, 0, (sockaddr *)&oClientAddr, iAddrLen);69if (iSendLen < 0)70 {71 cerr << "fail to send, err: " << strerror(errno) << endl;72continue;73 }74 cout << "echo to client, len: " << iSendLen << endl;75 }7677return0;78 }UDP客户端代码:1 #include <errno.h>2 #include <string.h>3 #include <sys/types.h>4 #include <sys/socket.h>5 #include <netinet/in.h>6 #include <arpa/inet.h>7 #include <stdlib.h>8 #include <iostream>910using namespace std;1112int main(int argc, char *argv[])13 {14if (argc != 4)15 {16 cout << "usage: " << argv[0] << " ip port message" << endl;17return -1;18 }1920char *szIp = argv[1];21 in_addr_t iIp = inet_addr(szIp);22if (iIp == INADDR_NONE)23 {24 cerr << "fail to parse ip: " << szIp << endl;25return -1;26 }27char *pEnd = NULL;28 uint16_t usPort = strtoul(argv[2], &pEnd, 10);29if (*pEnd != '\0')30 {31 cerr << "fail to parse port: " << argv[2] << endl;32return -1;33 }34char *szMsg = argv[3];35 size_t uiMsgLen = strlen(szMsg);3637int iSockFd = socket(AF_INET, SOCK_DGRAM, 0);38if (iSockFd < 0)39 {40 cerr << "fail to create socket, err: " << strerror(errno) << endl;41return -1;42 }43 cout << "create socket fd " << iSockFd << endl;4445 sockaddr_in oServerAddr;46 memset(&oServerAddr, 0, sizeof(oServerAddr));47 oServerAddr.sin_family = AF_INET;48 oServerAddr.sin_addr.s_addr = iIp;49 oServerAddr.sin_port = htons(usPort);50 ssize_t iSendLen = sendto(iSockFd, szMsg, uiMsgLen, 0, (sockaddr *)&oServerAddr, sizeof(oServerAddr));51if (iSendLen < 0)52 {53 cerr << "fail to send, err: " << strerror(errno) << endl;54return -1;55 }56 cout << "send to " << szIp << ":" << usPort << ", len: " << uiMsgLen << ", msg: " << szMsg << endl;5758char szRecvBuf[64 * 1024];59 sockaddr_in oRecvAddr;60 socklen_t iAddrLen = sizeof(oRecvAddr);61 ssize_t iRecvLen = recvfrom(iSockFd, szRecvBuf, sizeof(szRecvBuf), 0, (sockaddr *)&oRecvAddr, &iAddrLen);62if (iRecvLen < 0)63 {64 cerr << "fail to recv, err: " << strerror(errno) << endl;65return -1;66 }67 szRecvBuf[iRecvLen] = '\0';68 cout << "recv from " << inet_ntoa(oRecvAddr.sin_addr) << ":" << ntohs(oRecvAddr.sin_port) << ", len: " << iRecvLen << ", msg: " << szRecvBuf << endl; 6970return0;71 }。