1. 用C++寫了一個Window Socket的簡單通訊軟體,但就是無法聯網~~求高手~~
1、檢查一下伺服器有沒有打開埠進行監聽,客戶端是否可以連接到這個埠,伺服器有沒有accept。具體的源碼可以看飛鴿傳書,它的聊天功能用udp,文件傳輸用tcp,代碼有萬把行,api,vc6。我自己幾年前也實現了一個dll版本的,幾千行,api,bcb的。要的話留下郵箱。
2、如果是用控制項實現的socket,免談。
3、可以參考《windows網路編程技術》或《windows網路編程》一書。
2. 有WINDOWS網路編程視頻教程嗎,求視頻
不需要有IP分配的知識,伺服器需要有操作系統 windows socket Windows Sockets 規范以U.C. Berkeley 大學BSD UNIX 中流行的Socket 介面為範例定義了一套microsoft Windows 下網路編程介面。它不僅包含了人們所熟悉的Berkeley Socket
3. 想學習C++做3D游戲,不知道從哪入手
做一個3D游戲絕非一個人能辦到的,至少要有一個人編程一個人做模型。。。
以編程為主,請學習C++和OpenGL或者DirectX。而且做游戲又和純編程不一樣,要充分的發揮你的想像力和創造力(相信我,這兩點絕對重要,做游戲所需求的C++技術倒不是特別強————因為玩家也不會懂得你到底用了什麼高深的技術在你的游戲里。)。而且在製作3D游戲之前要先明白如何製作2D游戲(同樣也用C++和OpenGL或者DirectX)。3D模型什麼的,建議去網上下載或者叫人幫你做,自己學也可以,不過大概至少也要半年時間吧。
大概學習一年(編程)就可以做個差不多的3D游戲了。
C++推薦使用VC++(6.0以上都可以)。教程什麼的我還真不知道有什麼好的,教我的人(不是什麼老師,只是學做游戲的普通學生。)是用一本叫做Gem Programming(英文)的書教的,裡面涵蓋了製作游戲需要的所有東西,包括C++ OpenGL DirectX 音樂 聯網等。
4. 如何使用windows網路編程select
1. select系統調用
select系統調用是用來讓我們的程序監視多個文件描述符的狀態變化的。程序會停在select這里等待,直到被監視的文件描述符有某一個或多個發生了狀態改變。
select()的機制中提供一fd_set的數據結構,實際上是一long類型的數組,每一個數組元素都能與一打開的文件句柄建立聯系,建立聯系的工作由程序員完成,當調用select()時,由內核根據IO狀態修改fd_set的內容,由此來通知執行了select()的進程哪些Socket或文件可讀可寫。
select函數原型:
#include <sys/select.h> #include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, const struct timeval * timeout);
ndfs:select監視的文件句柄數,視進程中打開的文件數而定,一般設為要監視各文件中的最大文件描述符值加1。
readfds:這個文件描述符集合監視文件集中的任何文件是否有數據可讀,當select函數返回的時候,readfds將清除其中不可讀的文件描述符,只留下可讀的文件描述符。
writefds:這個文件描述符集合監視文件集中的任何文件是否有數據可寫,當select函數返回的時候,writefds將清除其中不可寫的文件描述符,只留下可寫的文件描述符。
exceptfds:這個文件集將監視文件集中的任何文件是否發生錯誤,其實,它可用於其他的用途,例如,監視帶外數據OOB,帶外數據使用MSG_OOB標志發送到套接字上。當select函數返回的時候,exceptfds將清除其中的其他文件描述符,只留下標記有OOB數據的文件描述符。
timeout:本次select()的超時結束時間。這個參數至關重要,它可以使select處於三種狀態:
(1)若將NULL以形參傳入,即不傳入時間結構,就是將select置於阻塞狀態,一定等到監視文件描述符集合中某個文件描述符發生變化為止;
(2)若將時間值設為0秒0毫秒,就變成一個純粹的非阻塞函數,不管文件描述符是否有變化,都立刻返回繼續執行,文件無變化返回0,有變化返回一個正值;
(3)timeout的值大於0,這就是等待的超時時間,即select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時後不管怎樣一定返回,返回值同上述。
函數的返回值:
正值:表示監視的文件集中有文件描述符符合要求
零值:表示select監視超時
負值:表示發生了錯誤,錯誤值由errno指定。
宏操作:
FD_ZERO(fd_set *set): 用來清除描述片語set的全部位
FD_SET(int fd,fd_set*set): 用來設置描述片語set中相關fd的位
FD_ISSET(int fd,fd_set *set): 用來測試描述片語set中相關fd 的位是否為真
FD_CLR(inr fd,fd_set* set): 用來清除描述片語set中相關fd 的位注意事項:
(1)對於可寫性的檢查,最好放在需要寫數據的時候進行檢查。如果和可讀性放在同一個地方進行檢查,那麼select很可能每次都會因為可寫性檢查成功而返回。
(2)select()調用會清空傳遞給它的集合參數中的內容,也就是會清空readfds、writefd、exceptfds這三個指針參數所指定的描述符集合。因此,在每次調用select()之前,必須重新初始化並把需要監視的描述符填寫到相應的描述符集合中。select()調用也會清空timeout指針所指向的struct timeval結構,所以在每次調用select()之前也要重新填充timeout指針所指向的struct timeval結構。
5. 如何學習網路編程
具體到編程,用java來實現網路編程是很容易的,可以作為網路編程的入門。使用C++和winsock相對復雜一些。
總之看實際需要了。
你好初學網路編程者可以從以下幾個步驟開展:
1)下載一個可以互動的學習工具,通過這個與這個工具互動,我們可以及時的學到每個api的結果如果。
對於有c/c++或java基礎的朋友通過一兩個禮拜的時間就可以上手了,另外個人建議初學者可以學習dive into python。
2)掌握網路編程中會用到的幾個基本概念和內涵,比如IP地址,port號,socket等
3)記住和消化網路編程C/S模型,把server和client端編程的常用模式理解和消化
4)花幾天時間學習socket api集,api集可以分為下面幾大類:創建 socket bind listen accept收發 read/recv/recvfrom write/send/sendto關閉 close shutdown參數 getsockopt/setsockopt地址 gethostbyaddr getaddrbyhost,...在學習這些api時候,可以先關注在函數功能,參數意義上
5)結合python互動平台,實踐socket api的用法,比如socket函數怎麼使用,bind怎麼使用等等。在互動過程中,我們可以變換參數,看看調用結果如何。比如,創建一個tcp socket的語法如下:socket(AF_INET,SOCK_STREAM)創建一個udp socket的語法如下:socket(AF_INET,SOCK_DGRAM)
6)學習socket server端編程實現簡單規約比如echo,time等,然後通過cmd中的telnet來測試。
7)學習I/O模型,比如阻塞、非阻塞和反應式(select,poll,WaitForMultipleObject)等
8)學習Richard Stevens的《Unix網路編程》,深入學習其中的api原理以及服務端設計原理,並通過代碼編寫。
9)下載高性能網路編程框架twisted,筆者強烈推薦,它將使你的網路編程效率提高10倍以上。
10)學習設計模式、操作系統知識比如線程、進程、同步等。
要想真正掌握計算機技術,並在IT行業里干出一番事業來,有所作為,具有一定的編程能力是一個基本條件和要求。打好基礎學編程要具備一定的基礎,總結之有以下幾方面:
(1)數學基礎 從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。
(2)邏輯思維能力的培養 學程序設計要有一定的邏輯思維能力,「邏思力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。因此在學習編程過程中,我們不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。
有些問題只有通過實踐後才能明白,也只有實踐才能把老師和書上的知識變成自己的,高手都是這樣成材的。
6. 求WINDOWS程序設計(C語言版)的視頻
C語言程序設計
提取碼:8uar復制這段內容後打開網路網盤手機APP,操作更方便哦!若資源有問題歡迎追問~
7. 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫
需要用到的頭文件包含:
#include <winsock2.h>
#include <windows.h>
與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫
Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:
Winsock 1:
Windows CE平台支持。
頭文件:WinSock.h
庫:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;
頭文件:WinSock2.h
庫:ws2_32.lib
mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll
(7)windows網路編程視頻擴展閱讀
winsock庫的載入與卸載:
載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
載入成功,返回值為0。
WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~
LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。
卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。
8. 有《Windows網路編程案例教程》的pdf和源代碼嗎可以分享給我嗎謝謝!
書名=Windows網路編程案例教程
作者=董相志編著
頁碼=415
ISBN=978-7-302-34489-6
出版社=北京:清華大學出版社 , 2014.01
附件已經上傳
9. 請給一些Windows中網路編程的資料
為一個不斷進取的編程者,我們常常不滿足於編程語言所提供的一般功能,總是希望能夠實現一些特殊的功能,這有時不但是我們程序的要求,有時也是編程者心理上需要(試想,還會有什麼比在深夜中巧妙解決一個難題而更令人興奮呢?)。VisualBasic,做為一個當前最流行的快速編程環境,就給我們提供了實現這些目標的平台,事實上,它無限擴展的API介面可以實現所有WINDOWS下可以實現的功能。然而對於初學者來說,「浩瀚「的API函數總是顯得那麼神奇與不可琢磨,因此在實際應用過程中不能夠靈活應用。下面我將結合兩個小例子來示範介紹VB中調用API函數的步驟和功能,並總結說明在實際工作中如何提高這方面的技巧。例子在WINDOWS98下採用VB6.0編譯。
一.限制滑鼠的移動
---- 有時我們的軟體要求用戶在未完成某一任務時,滑鼠不能移出當前活動控制項,換句話就是將滑鼠限制在控制項的內部,直到任務完成或用戶中斷為止。這個功能藉助API函數實現起來思路很清楚,代碼也很簡潔。其思路是先確定當前滑鼠的位置;然後確定當前活動控制項的大小;最後將滑鼠限制在活動控制項內。(下面忽略項目建立等過程)
---- 1.建立一個新項目:新窗體為form1,在form1上添加一個commandbutton,設置其Name=CMButton1;Caption=「將滑鼠限制在此按鈕中「
---- 2.拷貝API函數和POINTAPI結構:打開VB6.0自帶的API瀏覽器,調入WIN32API.txt文件,復制以下結構和函數聲明到form1的聲明部分:
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function ClientToScreen Lib
「user32「 Alias 「ClientToScreen「 (ByVal
hwnd As Long, lpPoint As POINTAPI) As Long
『用來確定當前滑鼠的位置
Private Declare Function ClipCursor Lib
「user32「 Alias 「ClipCursor「 (lpRect As Any)
As Long 『用來限定當前滑鼠的活動范圍
---- 3.定義一個通用過程ConfineTo
Public Sub ConfineTo (myCtl As Object)
On Error Resume Next
Dim tmpRect As RECT
Dim pt As POINTAPI
With myCtl
If TypeOf myCtl Is Screen Then 『鎖定在屏幕范圍內
tmpRect.Left = 0
tmpRect.Top = 0
tmpRect.Right = (.Width \ Screen.TwipsPerPixelX)
tmpRect.Bottom = (.Height \ Screen.TwipsPerPixelY)
Elseif TypeOf myCtl Is form 『鎖定在窗體范圍內
tmpRect.Left = (.Left \ Screen.TwipsPerPixelX)
tmpRect.Top = (.Top \ Screen.TwipsPerPixelY)
tmpRect.Right = (.Left + .Width) \ Screen.TwipsPerPixelX
tmpRect.Bottom = (.Top + .Height) \ Screen.TwipsPerPixelY
else
pt.X = 0
pt.Y = 0
Call ClientToScreen(.hWnd, pt)
『獲取當前控制項在屏幕上的位置
tmpRect.Left = pt.X
『保存當前控制項位置
tmpRect.Top = pt.Y
pt.X = .Width
pt.Y = .Height
Call ClientToScreen(.hWnd, pt)
tmpRect.Bottom = pt.Y
tmpRect.Right = pt.X
End If
Call ClipCursor(tmpRect)
End With
End Sub
---- 4.在 CMButton1_Click()中加入以下代碼
Static Cliped As Boolean
『靜態變數用來控制狀態切換
If Not Cliped Then
ConfineTo Cmbutton1
Cliped = True
Else
ConfineTo Screen 『取消滑鼠限制
Cliped = True
End If
---- 5. 運行後,滑鼠點擊cmbutton1,此時滑鼠只能被鎖定在此按鈕內部,再次點擊按鈕,限製取消。
二.創建臨時文件
---- 臨時文件用來保存軟體運行過程中的臨時變化,這對於熟悉WORD等軟體的人來說,經常會遇到。那麼臨時文件是如何產生的呢,其實很簡單,只需要一個API函數就可以。
---- 1.拷貝聲明函數(方法同前)
Private Declare Function GetTempFileName Lib 「kernel32「 _
Alias 「GetTempFileNameA「 (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
參數定義如下:
lpszPath =傳入保存臨時文件的路徑 ,如「C:\mytemp「
lpPrefixString=傳入臨時文件名開始的前三個字母,
起到幫助識別臨時文件來源的作用。
wUnique =0 ,windows隨機產生文件名;否則安其值定義文件名。
lpTempFileName=返回隨機文件名
---- 2.返回臨時文件名
Private Function GenTempName(sPath As String)
Dim sPrefix As String
Dim lUnique As Long
Dim sTempFileName As String
If IsEmpty(sPath) Then sPath = 「c:\temp「
sPrefix = 「TVB「
lUnique = 0 『windows隨機給名
sTempFileName = Space$(100)
GetTempFileName sPath, sPrefix, lUnique, sTempFileName
sTempFileName = Mid$(sTempFileName, 1,
InStr(sTempFileName, Chr$(0)) - 1) 『去掉多餘空格
GenTempName = sTempFileName
End Function
---- 3.將下面代碼加入到form1_click()事件中
MsgBox GenTempName(「c:\temp「)
---- 4.運行,滑鼠點擊form,彈出msgbox,顯示生成「c:\temp\TVB724.tmp「文件,用文件管理器查看,在c:\temp下有TVB724.tmp 文件,長度為0K。
---- 需要注意的是,傳入的路徑必須是有效路徑,否則GenTempName函數返回0,lpTempFileName中也沒有臨時文件名。
三.結束語
---- 從上面可以看出,API函數的確簡單高效,但也充滿一些看似高深的變數而使人卻步。我們不禁會問,究竟什麼時候要用到API函數?具體哪些函數可以解決我的問題?,那些函數中的變數都代表什麼?其實對這些問題,即使對一個VB高手也難給出明確的回答,因為API函數庫實在太龐大了,每一個人最終只能熟悉其中的一小部分(這也可能是調用API的文章層出不窮的原因吧)。總結自己的一點經驗,我覺得應該注意以下幾點。
---- 1.熟練掌握VB基本技巧,了解其所能所不能,這是最基本的要求。
---- 2.了解WINDOWS內部控制機理,這樣對一些復雜的問題就可以逐步分析其調用機制,初步確定採用哪部分的API函數來解決問題。
---- 3.案頭必備一本最新的VB版的WINDOWS API 大全,推薦機械工業出版社的< >。書中給出了每一個VB可以調用的API函數的詳細說明,可以幫助精確了解所需要的API函數的變數聲明。
---- 4.多看別人的程序。報紙雜志,尤其是網上這方面的文章數不清。這是最快的方法。
---- 5.隨用隨查。永遠不要在用不到的函數上浪費寶貴的時間
10. 學網路編程需要學習那些課程
這是網路編程的全部課程,要是感興趣的話可以了解一下:
第一階段
1、計算機操作基礎
2、Office辦公自動化
3、計算機組裝與維護
4、C語言
第二階段
1、SQL Server2005資料庫設計
2、和高級查詢
3、數據結構
4、C#面向對象程序設計
5、HTML5與CSS3開發
6、JavaScript
7、jQuery高級編程
8、PHP開發
第三階段
APP Development
1、JavaScript特效製作
2、jQuery應用開發
3、HTML5與CSS3開發
4、Java面向對象程序設計
第四階段
JAVAWEB Development
1、產品流程應用
2、移動平台界面設計
3、Oracle資料庫開發
4、JavaWeb應用開發
Mobile APP Development
1、實訓一:WEB前端設計與開發
2、實訓二:J2EE項目開發