socket動態庫專案

2021-10-13 17:11:43 字數 2651 閱讀 4673

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 建立乙...