亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cwsbook.txt

?? 介紹window下socket編程的一本好書
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
內容。經過仔細咀嚼和推敲后,更能得到一些編寫優質程序的靈感。
    該程序在FTP公司的PCTCP支撐環境下調試通過,不過只要讀者擁有任何符
合Windows Sockets 1.1規范的實現,也能順利執行該程序。


3.4.1 源程序目錄
1. wshout.c wshout主程序
2. wshout.h wshout頭文件
3. wshout.rc wshout資源文件
4. ushout.c UDP客戶機程序
5. ulisten.c UDP服務器程序
6. tshout.c TCP客戶機程序
7. tlisten.c TCP服務器程序
8. errno.c 獲取WSAE*錯誤描述字符串程序
9. resolve.c 客戶機/服務器啟動程序
  
    在編譯本程序時,筆者用的是BC3.1,只需做一個PRJ工程文件,將上述.c文
件及winsock.lib包括進來就行了。請注意winsock.h應在include目錄或當前目錄中,
winsock.lib可利用winsock.dll通過implib工具來建立。如果讀者使用其他的編譯器,
可自行作相應的調整,在此不再贅述。

3.4.2 程序邏輯結構

 

3.4.3 源程序清單及注釋
3.4.3.1 wshout.c清單
/*
 * 文件名: WSHOUT.C
 */

/* MSC Include files: */
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#include "wshout.h"

#define MAJOR_VERSION	1
#define MINOR_VERSION	2
#define WSA_MAKEWORD(x,y)	((y) * 256 + (x)) /* HI:Minor, LO:Major */

HANDLE	hInst;			/* 進程實例句柄 */
HWND	hOurWnd;		/* 主窗口句柄 */
HWND	hMainDlg;		/* 主對話框句柄 */

int ret;			/* 工作變量 */
char	prbuf[PRBUF_LEN];	/* 用于顯示文本的工作緩沖區 */

SOCKET sd;			/* 用于監聽連接的套接口描述字 */
long temporary_option   = 0L;	/* 缺省為阻塞模式 */
long blocking_option    = 0L;	/* 阻塞模式的全局標識 */
int run_cancelled	= 0;	/* 指示何時按下了取消按鈕 */
int len = 1024;			/* 一次寫的字節數 */
BOOL	running = FALSE;	/* 程序的運行狀態 */
const int iTCP = 1;		/* 指定為TCP Shout */
const int iUDP = 2;		/* 指定為UDP Shout */
int iProto	= 1;		/* 缺省為TCP Shout */
int iPortNo	= SOCK_SHOUT;	
int temporary_protocol  = 1;	/* 在Settings()中使用 */
int iShout  = 1;
int iListen = 2;
int iClientOrServer = 1;	/* 缺省為Shout(客戶機)	*/
int tClientOrServer = 1;	/* 在Settings()中使用 */
char HostModeBuf[20];/* 保存模式字符串 */
WORD VersionReqd;
LPWSADATA lpmyWSAData;

int PASCAL
WinMain (HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpCmdLine,int 
nCmdShow)
{

    HWND hWnd;
    MSG msg;
    BOOL InitApp(HANDLE);

    if (!hPrevInstance)
    if (!InitApp(hInstance))
	    return (NULL);

    hInst = hInstance;

    hWnd = CreateWindow("MainMenu",
	"Windows Shout",
	WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_MINIMIZEBOX,
	CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL);

    if (!hWnd)
	return (NULL);

    hOurWnd = hWnd;
    
    while (GetMessage(&msg, NULL, NULL, NULL)) {
	TranslateMessage(&msg); /* 翻譯虛擬鍵碼 */
	DispatchMessage(&msg);
    }

    return (msg.wParam);
}

BOOL InitApp(HANDLE hInstance)
{
    HANDLE hMemory;
    PWNDCLASS pWndClass;
    BOOL bSuccess;

    hMemory = LocalAlloc(LPTR, sizeof(WNDCLASS));
    pWndClass = (PWNDCLASS) LocalLock(hMemory);
    pWndClass->hCursor = LoadCursor(NULL, IDC_ARROW);
    pWndClass->hIcon = LoadIcon(hInstance, (LPSTR) "SHOUT");
    pWndClass->lpszMenuName = (LPSTR) "MainMenu";
    pWndClass->lpszClassName = (LPSTR) "MainMenu";
    pWndClass->hbrBackground = GetStockObject(WHITE_BRUSH);
    pWndClass->hInstance = hInstance;
    pWndClass->style = NULL;
    pWndClass->lpfnWndProc = ShoutWndProc;

    bSuccess = RegisterClass(pWndClass);

    LocalUnlock(hMemory);
    LocalFree(hMemory);
    return (bSuccess);
}

long FAR PASCAL ShoutWndProc(HWND hWnd, WORD message,WORD wParam, 
LONG lParam)
{
    FARPROC lpDialogBoxProc;

    switch (message){
	case WM_CREATE:
	    
	    /* Put up the dialog box */
	    lpDialogBoxProc = MakeProcInstance(DialogProc, hInst);
	    DialogBox (hInst, (LPSTR) "MainDialog", hWnd, lpDialogBoxProc) ;
	    FreeProcInstance(lpDialogBoxProc);
	    PostMessage(hWnd, WM_DESTROY, 0, 0L);
	    break;
	    
	case WM_DESTROY:
	    PostQuitMessage(0);
	    break;
	
	default:
	    return(DefWindowProc(hWnd, message, wParam, lParam));
	}
    return NULL;

}


BOOL FAR PASCAL DialogProc(HWND hOurDlg, WORD message, WORD wParam, 
LONG lParam)
{
    FARPROC lpProcAbout;
    FARPROC lpProcSettings;
    long lret;
    WORD wMajorVersion, wMinorVersion;
    char hostnm[64];		/* 包含主機名的工作緩沖區 */
 
    switch (message) {
	case WM_INITDIALOG:
	    /* 選擇缺省主機 */
	    SetDlgItemText(hOurDlg, IDD_HNAME, "");
	    SendDlgItemMessage(hOurDlg,		/* 對話框句柄 */
		IDD_HNAME,			/* 向何處發送msg */
		EM_SETSEL,			/* 選擇字符 */
		NULL,				/* 附加信息 */
		MAKELONG(0, 0x7fff));		/* 全部內容 */
	    SetFocus(GetDlgItem(hOurDlg, IDD_HNAME));
	    
	    /* 初始化 */
	    hMainDlg = hOurDlg;  /* 保存自己的窗口句柄 */
	    SetDlgItemText(hOurDlg, IDD_COHOST,"Shout to:");
	    wMajorVersion = MAJOR_VERSION;
	    wMinorVersion = MINOR_VERSION;
	    VersionReqd=WSA_MAKEWORD(wMajorVersion, wMinorVersion);
  
	    lpmyWSAData = (LPWSADATA)_calloc(1, sizeof(WSADATA));
	    
	    ret = WSAStartup(VersionReqd, lpmyWSAData);
	    
	    if (ret != 0){
		wshout_err (hOurDlg, WSAGetLastError(), "WSAStartup()");
	    }
	    
	    return (TRUE); 

	case WM_CLOSE:
	    PostMessage(hOurDlg, WM_COMMAND, IDM_EXIT, 0L);
	    break;
	    
	case WM_SYSCOMMAND:
	    SendMessage(hOurWnd, message, wParam, lParam);
	    break;
	    
	case WM_COMMAND:
	    switch (wParam) {
	    case IDD_CONNECT:		/* 按下連接按鈕 */
	    case IDM_START:		/* 選擇了Start菜單項 */
		run_cancelled = FALSE;
		/* 不能重入 */
		if (running){
		    MessageBox(hOurWnd,"Shout is already running !",
			"Shout", MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);
		    return FALSE;
		}
		ClearBoxes(hOurDlg);
		running = TRUE;

		if (iClientOrServer == iShout) {
		   /* 確保有主機名 */
		   if (GetDlgItemText (hOurDlg, IDD_HNAME, hostnm, 80) < 2) {
		       MessageBeep(0);
		       SetDlgItemText(hOurDlg, 
			              IDD_COMMENT,"No hostname specified");
		       running = FALSE;
		       break;
		   }
		   sd = ResolveAndConnectHost((char FAR *)hostnm,hOurDlg,iProto,
		                              iPortNo);
		   if (sd == SOCKET_ERROR) {/* 無法創建套接口 */
		       running = FALSE;
		       break;
		   }
	        }
		else {
		   sd = GetSocketAndBind(hOurDlg, iProto, iPortNo);
		   if (sd == SOCKET_ERROR) {
		    running = FALSE;
		    break;
		   }
	        }
		
		/* Set the I/O mode of the socket */
		if (blocking_option) {
		    lret = 1L;  /* 非阻塞模式 */
		    ioctlsocket(sd, FIONBIO, (u_long FAR *) &lret);
		}
		else {
		    lret = 0L; /* 阻塞模式 */
		    ioctlsocket(sd, FIONBIO, (u_long FAR *) &lret);
		}
		
		if (iClientOrServer == iShout) {  /* SHOUT */
		    /* 產生數據并寫入套接口 */
		    if (iProto == iTCP) 
			lret = TWriteData(sd, hOurDlg, len);
		    else /* UDP */
			lret = UWriteData(sd, hOurDlg, len);
		}
		else {	/* LISTEN */
		    if (iProto == iTCP)
			lret = TReadData(sd,hOurDlg, len);
		    else /* UDP */
			lret = UReadData(sd,hOurDlg, len);
		}
		
		closesocket(sd);
		running = FALSE;
		break;
		
	    case IDD_CANCEL:
		if (running) {
		    /* 停止 */
		    ret = WSACancelBlockingCall();
		    run_cancelled = TRUE;
		    if (ret == SOCKET_ERROR) {
			/* WSANOTINITIALISED or WSAENETDOWN or WSAEINVAL */
			if (h_errno == WSAENETDOWN) {
			    /* Watch out for hAcceptSock! */
			    /* close what is left of the connection */
			    closesocket(sd);
			}
		    }
		}
		break;
		
	    case IDM_EXIT:
		ret = WSACleanup();
		if (ret == SOCKET_ERROR && h_errno == WSAEINPROGRESS){
		    MessageBox(hOurWnd, 
			"Data transfer in progress.\nStop transfer first.",
			"WndProc()", MB_OK | MB_APPLMODAL|MB_ICONINFORMATION);
		    break; /* 一個套接口正處于阻塞狀態 */
		}
		
		_free((char NEAR *) lpmyWSAData);
		EndDialog(hOurDlg, TRUE) ; /* 退出 */
		break;
		
	    case IDM_ABOUT:
		lpProcAbout = MakeProcInstan

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天久久比比资源色| 男女激情视频一区| 天天综合天天做天天综合| 国产在线视频一区二区| 欧美三日本三级三级在线播放| 欧美r级在线观看| 亚洲午夜三级在线| 成人av午夜电影| 精品电影一区二区| 日韩精品电影在线| 色欧美片视频在线观看在线视频| 久久久久九九视频| 日韩在线卡一卡二| 欧美午夜精品久久久久久孕妇| 国产无人区一区二区三区| 免费在线观看视频一区| 在线精品视频一区二区三四| 国产精品乱人伦| 国产成人精品免费网站| 日韩欧美一区中文| 日韩精品午夜视频| 在线成人av影院| 亚洲国产成人精品视频| 在线免费视频一区二区| 亚洲伦理在线精品| 97精品超碰一区二区三区| 国产精品丝袜黑色高跟| 粉嫩高潮美女一区二区三区| 日韩欧美一区在线| 蜜桃久久av一区| 日韩视频免费观看高清在线视频| 爽好多水快深点欧美视频| 欧美视频一二三区| 三级在线观看一区二区| 91精品国产乱| 久久99精品视频| 久久综合色8888| 国产精品88888| 国产精品免费视频一区| 国产99一区视频免费| 中文字幕成人网| 一本色道久久加勒比精品| 亚洲视频图片小说| 欧美最新大片在线看| 午夜欧美在线一二页| 91精品国产综合久久久久久久久久| 天涯成人国产亚洲精品一区av| 欧美一级在线免费| 国产经典欧美精品| 亚洲欧美一区二区三区国产精品| 91美女视频网站| 午夜欧美2019年伦理| 日韩一级成人av| 国产成人亚洲综合a∨猫咪| 国产精品美日韩| 欧美三片在线视频观看| 美女视频一区在线观看| 日本一区二区视频在线| 91行情网站电视在线观看高清版| 五月婷婷欧美视频| 久久精品无码一区二区三区| 色婷婷亚洲一区二区三区| 美国十次综合导航| 中文字幕中文字幕中文字幕亚洲无线| 日韩亚洲欧美综合| 麻豆91在线看| 亚洲欧美一区二区三区孕妇| 日韩欧美成人午夜| 97国产精品videossex| 久久福利资源站| 中文字幕一区二区三区不卡在线| 欧美二区在线观看| 成人精品国产免费网站| 日韩成人dvd| 中文字幕人成不卡一区| 欧美tickling网站挠脚心| 91精品1区2区| 成人午夜精品一区二区三区| 亚洲国产日韩a在线播放| 国产香蕉久久精品综合网| 欧美日韩国产在线播放网站| 成人午夜又粗又硬又大| 日本美女一区二区三区| 亚洲精品国产无天堂网2021| 久久亚洲精精品中文字幕早川悠里| 91成人国产精品| 成人激情午夜影院| 国产一区在线视频| 亚洲成人综合在线| 亚洲视频免费观看| 国产亚洲欧美中文| 日韩一区二区三区电影在线观看| 97精品久久久午夜一区二区三区 | 欧美一区二视频| 91在线看国产| 国产高清在线观看免费不卡| 视频一区免费在线观看| 亚洲国产一区视频| 亚洲视频网在线直播| 国产精品伦理在线| 国产午夜精品美女毛片视频| 91精品国产麻豆国产自产在线| 色视频欧美一区二区三区| 不卡的av电影| 成人精品高清在线| 99久久久国产精品免费蜜臀| 成人看片黄a免费看在线| 国产精品伊人色| 国产一区二区精品久久| 极品少妇xxxx精品少妇| 久久爱www久久做| 日本美女视频一区二区| 日韩精品一卡二卡三卡四卡无卡| 亚洲国产精品一区二区久久| 一区二区三区精品在线观看| 亚洲免费在线看| 亚洲欧美一区二区三区国产精品 | 欧美日韩国产123区| 欧美视频精品在线| 4hu四虎永久在线影院成人| 欧美美女视频在线观看| 337p亚洲精品色噜噜噜| 欧美一区二区日韩| 精品国产青草久久久久福利| 久久久久久久久久久黄色| 久久久夜色精品亚洲| 欧美极品另类videosde| 亚洲人成伊人成综合网小说| 一区二区三区四区国产精品| 亚洲二区视频在线| 久久精品国产精品青草| 国产剧情一区在线| 97精品视频在线观看自产线路二| 欧美三级韩国三级日本一级| 欧美一级高清片在线观看| 精品人在线二区三区| 国产片一区二区| 一区二区三区四区国产精品| 人人超碰91尤物精品国产| 极品尤物av久久免费看| 成人激情免费电影网址| 欧美三级中文字| 欧美成人猛片aaaaaaa| 欧美国产日本韩| 亚洲国产人成综合网站| 久久爱www久久做| 色综合久久久久综合99| 欧美一区二区播放| 国产精品色婷婷久久58| 亚洲国产日日夜夜| 国产精品一区二区久久不卡| 91麻豆成人久久精品二区三区| 6080午夜不卡| 亚洲丝袜精品丝袜在线| 日韩电影在线一区二区| av在线播放一区二区三区| 91麻豆精品国产91久久久久久| 国产欧美精品区一区二区三区 | 久草精品在线观看| 99国产精品久| 日韩欧美高清一区| 亚洲视频一区在线| 精品制服美女久久| 日本韩国一区二区| 国产欧美在线观看一区| 视频一区二区三区入口| 色播五月激情综合网| 国产欧美日韩久久| 免费视频最近日韩| 色94色欧美sute亚洲线路二| 久久色中文字幕| 日韩激情视频在线观看| 色综合天天综合给合国产| 精品国产91乱码一区二区三区| 亚洲国产综合色| 91天堂素人约啪| 国产三级精品视频| 捆绑调教美女网站视频一区| 欧美色爱综合网| 一区二区在线观看不卡| 国产69精品久久777的优势| 日韩欧美一区电影| 奇米色一区二区三区四区| 欧美在线高清视频| 亚洲嫩草精品久久| kk眼镜猥琐国模调教系列一区二区| 久久香蕉国产线看观看99| 免费人成精品欧美精品| 51精品久久久久久久蜜臀| 亚洲va欧美va天堂v国产综合| 一本到高清视频免费精品| 中文字幕在线不卡一区| 成人国产视频在线观看| 国产偷国产偷亚洲高清人白洁| 精品一区二区三区视频在线观看| 欧美美女直播网站| 日韩精品91亚洲二区在线观看| 欧美日韩亚洲丝袜制服| 五月天亚洲精品| 日韩丝袜情趣美女图片|