Ⅰ c語言網路編程 書
朋友,我的建議是,你在學網路編程之前,一定要把c基礎學好,當然不只看譚教授的書了,下面推薦的幾本書被公認為c語言方面的經典書籍,分別是:
1、c和指針 Kenneth A.Reek 著 徐波譯 人民郵電出版社
2、c陷阱和缺陷 Andrew Koenig著 高巍譯 人民郵電出版社
3、c專家編程 Dennis Ritchie著 人民郵電出版社
另外推薦基本網路編程書籍,也被稱為經典,分別是:
1、TCP/IP詳解 卷1:協議 W. Richard Stevens著 謝希仁校 機械工業出版社
2、unix網路編程(第三版) steven著 清華大學出版社
你說你c基礎不是很好,所以我建議你看書的先後順序:先把譚教授那本書看透,接著看上面的c語言方面的三本書籍,當然你可以先看其中的一本或兩本,看透後,你的c語言功底就很不錯了(一定要結合書裡面的範例多做題),此時你的基礎就打好了,就可以接著看下面我給你推薦的兩本關於網路編程方面的書籍了!好好學習,學海無涯!
Ⅱ 網路編程用 c還是c++
網路的底層API都是C語言的,不管是Linux還是Windows都是這樣。用C++是為了封裝代碼,達到復用和擴展的目的。簡單的項目用C足夠了,C++適合開發復雜的大型項目。據說ACE的結構很復雜,不太適合學習,我反正是沒有接觸過,只用過 Berkeley Socket
Ⅲ 怎樣用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庫就可以了。
Ⅳ 純C語言網路編程
那個是VC中的庫,也會用到WINDOWS SDK中的庫,,,,,,,,單純使用C語言的,做不到的。
~~~~~~~~~~~~~~~~~
Ⅳ C語言網路編程
路由器本身不具備數據保存能力。
通常,路由器的功能是埠轉發。在路由器建立埠映射(公網某埠和內網某台電腦的某埠關聯)後,外網電腦才能和內網某電腦進行通信,通信過程中路由器一直負責數據的中轉。但內網電腦一旦關閉連接,路由器是無法單獨收取並保存信息的,它會直接把斷連事件通知給連接的另一端(外網某電腦)。
例如你的情況,如果區域網里是作為伺服器S(監聽方),外網某電腦作為客戶端C(連接方)。
S程序本身監聽埠2014,而C要連接的是路由器在公網的12345埠。
設路由器在公網IP是123.124.125.126,S的內網IP是192.168.1.1。
這時需要對路由器進行手動配置,讓路由器能將公網的12345埠和內網192.168.1.1這台電腦的2014映射關聯。
這時,內網192.168.1.1上的S對2014進行監聽(就用bind然後listen),路由器會反映到公網上,於是在公網看來,就是」電腦「123.124.125.126在對12345進行監聽。
而如果外網連接123.124.125.126:12345(注意冒號),路由器會將這個連接請求轉化成對192.168.1.1:2014(注意冒號)的連接請求,於是S就會收到連接,能用accept接受它。
後面都和區域網編程一樣了。
有問題請繼續追問。
Ⅵ 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語言
多閱讀別人書寫的結構良好的程序
Ⅶ c語言網路編程
可以,不過C語言擅長的是邏輯處理和底層交互,頁面展現用C就太麻煩了
如果是網路方面的編程,建議你看看套介面Socket方面的書,最好在Linux下面,在Win下面就用wsock32的知識
Ⅷ C語言網路編程問題
//UDP服務代碼// Mole Name: Receiver.c
//
// Description:
// This sample receives UDP datagrams by binding to the specified
// interface and port number and then blocking on a recvfrom()
// call
//
// Compile:
// cl -o Receiver Receiver.c ws2_32.lib
//
// Command line options:
// sender [-p:int] [-i:IP][-n:x] [-b:x]
// -p:int Local port
// -i:IP Local IP address to listen on
// -n:x Number of times to send message
// -b:x Size of buffer to send
//
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>#define DEFAULT_PORT 5150
#define DEFAULT_COUNT 25
#define DEFAULT_BUFFER_LENGTH 4096int iPort = DEFAULT_PORT; // Port to receive on
DWORD dwCount = DEFAULT_COUNT, // Number of messages to read
dwLength = DEFAULT_BUFFER_LENGTH; // Length of receiving buffer
BOOL bInterface = FALSE; // Use an interface other than
// default
char szInterface[32]; // Interface to read datagrams from//
// Function: usage:
//
// Description:
// Print usage information and exit
//
void usage()
{
printf("usage: sender [-p:int] [-i:IP][-n:x] [-b:x]\n\n");
printf(" -p:int Local port\n");
printf(" -i:IP Local IP address to listen on\n");
printf(" -n:x Number of times to send message\n");
printf(" -b:x Size of buffer to send\n\n");
ExitProcess(1);
}//
// Function: ValidateArgs
//
// Description:
// Parse the command line arguments, and set some global flags to
// indicate what actions to perform
//
void ValidateArgs(int argc, char **argv)
{
int i; for(i = 1; i < argc; i++)
{
if ((argv[i][0] == '-') || (argv[i][0] == '/'))
{
switch (tolower(argv[i][1]))
{
case 'p': // Local port
if (strlen(argv[i]) > 3)
iPort = atoi(&argv[i][3]);
break;
case 'n': // Number of times to receive message
if (strlen(argv[i]) > 3)
dwCount = atol(&argv[i][3]);
break;
case 'b': // Buffer size
if (strlen(argv[i]) > 3)
dwLength = atol(&argv[i][3]);
break;
case 'i': // Interface to receive datagrams on
if (strlen(argv[i]) > 3)
{
bInterface = TRUE;
strcpy(szInterface, &argv[i][3]);
}
break;
default:
usage();
break;
}
}
}
}//
// Function: main
//
// Description:
// Main thread of execution. Initialize Winsock, parse the command
// line arguments, create a socket, bind it to a local interface
// and port, and then read datagrams.
//
int main(int argc, char **argv)
{
WSADATA wsd;
SOCKET s;
char *recvbuf = NULL;
int ret,
i;
DWORD dwSenderSize;
SOCKADDR_IN sender,
local; // Parse arguments and load Winsock
//
ValidateArgs(argc, argv); if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup failed!\n");
return 1;
}
// Create the socket and bind it to a local interface and port
//
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == INVALID_SOCKET)
{
printf("socket() failed; %d\n", WSAGetLastError());
return 1;
}
local.sin_family = AF_INET;
local.sin_port = htons((short)iPort);
if (bInterface)
local.sin_addr.s_addr = inet_addr(szInterface);
else
local.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d\n", WSAGetLastError());
return 1;
}
// Allocate the receive buffer
//
recvbuf = GlobalAlloc(GMEM_FIXED, dwLength);
if (!recvbuf)
{
printf("GlobalAlloc() failed: %d\n", GetLastError());
return 1;
}
// Read the datagrams
//
for(i = 0; i < dwCount; i++)
{
dwSenderSize = sizeof(sender);
ret = recvfrom(s, recvbuf, dwLength, 0,
(SOCKADDR *)&sender, &dwSenderSize);
if (ret == SOCKET_ERROR)
{
printf("recvfrom() failed; %d\n", WSAGetLastError());
break;
}
else if (ret == 0)
break;
else
{
recvbuf[ret] = '\0';
printf("[%s] sent me: '%s'\n",
inet_ntoa(sender.sin_addr), recvbuf);
}
}
closesocket(s); GlobalFree(recvbuf);
WSACleanup();
return 0;
}
Ⅸ c語言網路編程 網路編程什麼語言
網路編程這個概念太大了,包括很多東西,需要各種語言。大概給你說一說吧。 傳輸層以下的編程技術,一般來說是用匯編、C語言這一類與底層結合很緊密的編程語言。比如,基本的路由器編程、網路層數據交換技術編程等等。