xsocket/xsocket.h
class
xsocket
;
xsocket/xsocket.cpp
#include
"xsocket.h"
#include
#include
#include
#include
//標頭檔案中盡量不要引用,以後要做跨平台應用,不同平台的標頭檔案引用可能不一樣.**件就變得不通用了
#include
using
namespace std;
xsocket::
bind
(unsigned
short port)
//建立鏈結,三次握手的資訊會存在這裡,當讀這個socked的時候會獲取與使用者建立的鏈結
this
->sock =
socked
(af_inet,sock_stream,0)
;//獲取檔案id,win裡面的控制代碼if(
this
->sock <=0)
//bing->位址填充(協議、ip、port),告訴系統ip+port的資料與某乙個socked關聯並寫到寫個socked檔案中
sockaddr_in saddr;
saddr.sin_family = af_inet;
//協議型別
saddr.sin_port =
htons
(port)
;//轉換為網路傳輸位元組序
saddr.sin_addr.s_addr =
htonl(0
);//long,0表示任何位址都接受
int re =
bind
(sock,
(sockaddr*
)&saddr,
sizeof
(saddr));
//c語言沒有過載,只能通過同乙個介面sockaddr,需要強轉不同型別,最後通過size來判斷繫結的是什麼型別
if(re ==-1
)//以上只是告訴,但是並沒有開始寫,從listen開始發過來的資料開始寫
listen
(sock,
100)
;//引數2:未完成佇列的大小,非併發數量,理解為快取最多放多少個,一瞬間能夠處理的數量,假設100,但是進來了1000,還有900個都會被扔掉:
cout <<
"bing port"
<< port <<
"success"
<< endl;
return
true;}
int xsocket::
accept()
return client;
}
xsocket/makefile
out=libxsocket.so
cc=$(g++)
$(out)
:xsocket.cpp xsocket.h
$(cc)
$+ -o $@ -shared -fpic -g -std=c++11#c++11之前類中的成員變數不能賦初值,只能在建構函式中
cp *.so /usr/lib#這樣寫的好處是程式可以直接執行
//--------------------------------
xserver/makefile
out=xserver
cc=g++
ctag=-i.
./xsocket.h -l.
./xsocket -g -std=c++11
libs=-lxsocket
$(out):xserver.
cpp $(cc) $+
-o $@ $(ctag) $(libs)
install:
cp $(out)
/usr/bin
cp../xsocket/libxsocker.so /usr/lib
clean:
rm $(out)
-rf rm
*.o -rf
xserver/xserver.cpp
#include
"xsocket.h"
#include
#include
using
namespace std;
intmain
(int argc,
char
*ar**)
xsocket server;
server.
bind
(port)
;int client = server.
accept()
; cout <<
"accept client id : "
<< client << endl;
if(client<=0)
char buf[
1024]=
0;int len =
recv
(client,bug,
size
(buf)-1
,0);
if(len >0)
}
缺少動態庫socket的編譯錯誤
在編譯乙個程式時,系統產生如下的錯誤,原因是makefile中沒有包含相應的動態鏈結庫libsocket.so,需要在makefile中加入 lsocket。g o program netopt bin forecast l usr lib l usr local lib l program net...
動態庫專題 靜態庫和動態庫
linux中有兩類函式庫,分別是靜態庫和動態庫。靜態函式庫 這類庫的名字一般是lib a 利用靜態函式庫編譯成的檔案比較大,因為整個函式庫的所有資料都會被整合進目標 中,他的優點就顯而易見了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進去了。當然這也會成為他的缺點,因為...
動態載入動態庫
message函式的宣告你應該知道吧,把它的宣告和下面的語句寫到乙個標頭檔案中 pragma comment lib,a.lib 然後你的對話方塊.cpp中包含這個標頭檔案就可以使用message函式了。如果dll沒有對應的.lib檔案,那麼就只能使用動態載入的方式了。動態呼叫動態庫步驟 1 建立乙...