① c語言的網路編程特點有哪些(在線等待,答得好馬上給分!)
1、你說得用C語言開發網路程序,一定指的是在WIN/UNIX/LINUX/SOLARIS/FreeBSD等多進程/多線程操作系統下的編程,網路編程是基於B/S或者C/S架構的,無論那種,S都需要有多線程或者子進程的處理與客戶端通信的能力,DOS下的C是不具備這個能力。另外,網路程序是對操作系統多線程/多進程能力要求很高的應用,所以UNIX下的C編程能很好的滿足要求。
2、網路編程只要遵從一種協議,語言是沒有限定的,比較各種語言編寫的網路應用的特點,歸根結底還是回到這種語言已經它存在的操作系統的特點。相比與其他語言開發的網路程序,用UNIX/SOKCET/C這種模式開發的網路應用能最大限度的利用系統資源,同時兼備UNIX的穩定性和C的高效率,是大型網路應用經常採用的方式,例如著名的freeBSD,大量的論壇都是這樣的方式。很多網路應用,離開UNIX和C,在重連接負荷的情況下是無法工作的。
3、但是由於高效與通用是一對矛盾,UNIX/C開發的網路應用,比較靠近系統底層,代碼的可移植性、可重用性相對於使用winsock編程的WINDOWS/C++方案的網路應用要差一些,windows的MFC已經對網路協議做了很多層的封裝,使用C++來繼承可以節省大量開發時間。
4、結論,如果你想開發自己全新的網路應用/協議,並且要承擔很重的用戶訪問負荷,那麼你可以用C,而且操作系統要用UNIX/LINUX,如果你僅僅希望用已經成熟的internet協議寫一些界面漂亮的網路應用,推薦你用WINDOWS/C++方式。
② Linux C語言網路編程問題!
unsigned int dir(char * server) {
int sck;//套接字變數
struct sockaddr_in serv_adr; //遠程主機的地址
struct hostent *host; //指向遠程主機的指針
unsigned char databuf[FILEBUF_SIZE]; //數據
int bytes = 0, bytesread = 0; //位元組數,讀取到的位元組數
host = gethostbyname(server); //根據遠程主機的主機名,得到指向遠程主機的指針
if (host == (struct hostent *) NULL) { //如果得到指向遠程主機的指針失敗,報告錯誤,並返回
perror("gethostbyname failed");
return 0;
}memset(&serv_adr, 0, sizeof(serv_adr)); //初始化遠程主機的地址,結構體內所有成員清零
serv_adr.sin_family = AF_INET; //設置地址類型
memcpy(&serv_adr.sin_addr, host->h_addr, host->h_length);//取出指向遠程主機的指針中包含的地址信息,賦給遠程主機地址變數
serv_adr.sin_port = htons(SERVICE_PORT);//設置埠號,比如http服務對應80埠,ftp對應21埠
if ((sck = socket(AF_INET, SOCK_STREAM, 0)) < 0) { //如果建立TCP協議的套接字失敗,報告錯誤,並返回
perror("error on socket()");
return 0;
}
if (connect(sck, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) < 0) {//如果使用該套接字連接到遠程主機失敗,報告錯誤,並返回
perror("error on connect()");
return 0;
}write(sck, "DI\n\n", 4); //連接成功,發送內容為"DI\n\n"的消息,遠程主機收到該消息,解析後生成目錄列表,並將目錄列表信息傳遞回來
printf("Remote directory listing:\n");//輸出提示信息「遠程主機正在生成目錄列表」
while ((bytes = read(sck, databuf, FILEBUF_SIZE)) > 0) { //從套接字的數據流中讀取遠程主機的返回信息(即目錄列表),每次讀取FILEBUF_SIZE個位元組,直到全部讀取完畢
write(fileno(stdout), databuf, bytes);//將每次讀到的數據,輸出到標准輸出流(stdout),即屏幕上
bytesread += bytes;//接收到的位元組數累加
}
close(sck); /* Close the socket */ //通信完成,關閉套接字,關閉連接
return bytesread; //返回讀取到的位元組數(即遠程主機返回的信息的大小)
}
③ 在windows下,如何用純C語言實現socket網路編程
mfc只是對socket進行了一些封裝,大部分人做網路編程都是用的原始的socket,比如如下介面都可以在c下進行調用
1.socket()
2.bind()
3.connect()
4.listen()
5.accept()
6.send() 和recv()
7.sendto() 和recvfrom()
8.close() 和shutdown()
9.getpeername()
10.gethostname()
這些介面是在Winsock2.h中定義的不是在mfc中定義的,你只需要包含Winsock2.h頭文件和Ws2_32.lib庫就可以了。
④ 在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
(4)c語言網路協議編程擴展閱讀
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);比起載入,卸載的函數真是輕松愉快。
⑤ c語言的網路編程特點有哪些(在線等待,答得好馬上給分!)
1. C語言的特點
C語言是一種廣受歡迎的結構化程序設計語言,具有極強的生命力.
"C語言無所不能!" :適用面比較廣,具有高級語言的優點和低級語言特點
與硬體無關,可移植性強
C語言是一門簡潔語言:僅有32個關鍵字,9種控制語句
在所有高級語言中,目標代碼質量高,運行效率最高
結構化,模塊化語言,非常適合結構化程序設計.
2.結構化程序設計方法
結構化程序設計方法強調程序設計風格和程序結構的規范化,提倡清晰的結構.
特點:
自頂向下,逐步細化:將問題分解為子問題,將子問題分解為再小的模塊.直到該模塊我們可以很容易地求解為止.
模塊化設計:對每個模塊,用結構化的方法加以設計.
結構化編碼:對每個模塊,分別編寫對應的函數.
目標:
便於多人分工協作完成大型軟體;便於代碼維護;
C語言的編程
3. C語言基本概念
Hello World! 示例
int main()
{ printf("Hello, world!");
return 0; }
函數 結構化,模塊化的基礎
主函數main()
庫函數:數學函數,字元串函數,io函數,內存分配函數
scanf, printf,…
C語言的編程
C語言基本概念(數據表達)
數據類型:整型,實型,字元型
數組:同種數據類型的元素的集合;下標引用
指針: (基本要求:看懂別人的程序)
注:建議掌握計算機硬體工作原理,如直接定址,間接定址;至少掌握變數的存儲方式 (《C程序設計》p201)
1) 指針即地址;指針變數是用於存放地址的變數
2) 指針可以與整型變數一樣運算;
3)★ 指針必須具備合法地址才可用;
C語言的編程
C語言基本概念(數據表達)
結構 (構造類型)
是由不同數據類型的數據組成的集合體;
struct student /*定義結構體類型*/
{ char name[20];
int sex;
int age;
char addr[100]; };
注:結構體變數不能作為一個整體參加數據處理;
struct student Wang2;
Wang2.age=22;
C語言的編程
C語言基本概念(程序結構)
表達式:算術,關系,邏輯,賦值,函數
語句
順序結構,選擇結構(if語句,switch語句),
循環結構(while語句,for語句與do while語句)
函數:輸入輸出函數
文件:永久保存數據的方式
流式文件;FILE結構體;文件io函數;(p309)
C程序的編寫與上機調試
4. C程序的編寫與上機調試
Hello World! 示例
cl
tc2.0 (略)
vc6.0: 規范的project操作示範
(1) new一個空的基於console的project;
(2) 創建c文件,並輸入代碼;
(3) 將c文件加入project;
(4) 編譯,調試,運行;
對軟體開發成本高和進度估計不準確.
用戶對已完成的"軟體系統"不滿意.
軟體產品的質量不可靠.
軟體的維護困難,維護的人員與費用不斷增加.
缺乏完整,正確的文檔資料.
軟體成本在計算機系統中所佔比例逐年上升.
軟體的發展跟不上硬體的發展和用戶的要求.
軟體的規模非常龐大,多人共同開發,必須有嚴格和科學的管理.
軟體開發過分依賴於個人的智力勞動和經驗.
學習指針最好是先學些計算機硬體工作的原理,例如:直接定址,間接定址等,只有了解了這些內容以後,你再學指針就比較容易理會,畢竟C語言是一門介於機器語言與高級語言中間的語言,沒有一些硬體工作知識是很難領悟它的真諦的.
1.指針是地址變數:它的值有兩種:其一是地址,其二是內容.不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同.例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己.
2.指針是可以運算的,它的運演算法則與變數是一致的.
另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變數.建議各位對於指針只要能看懂就行!
對軟體開發成本高和進度估計不準確.
用戶對已完成的"軟體系統"不滿意.
軟體產品的質量不可靠.
軟體的維護困難,維護的人員與費用不斷增加.
缺乏完整,正確的文檔資料.
軟體成本在計算機系統中所佔比例逐年上升.
軟體的發展跟不上硬體的發展和用戶的要求.
軟體的規模非常龐大,多人共同開發,必須有嚴格和科學的管理.
軟體開發過分依賴於個人的智力勞動和經驗.
學習指針最好是先學些計算機硬體工作的原理,例如:直接定址,間接定址等,只有了解了這些內容以後,你再學指針就比較容易理會,畢竟C語言是一門介於機器語言與高級語言中間的語言,沒有一些硬體工作知識是很難領悟它的真諦的.
1.指針是地址變數:它的值有兩種:其一是地址,其二是內容.不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同.例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己.
2.指針是可以運算的,它的運演算法則與變數是一致的.
另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變數.建議各位對於指針只要能看懂就行!
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序