socket通信原理
socket\u5de5\u4f5c\u539f\u7406\uff0c\u5feb\u901f\u63a5\u5165\u5373\u65f6\u901a\u8baf\u548c\u97f3\u89c6\u9891\u80fd\u529b\uff0c\u514d\u8d39\u8bd5\u7528socket通信原理是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
Socket在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket 起源于 UNIX,在 UNIX 一切皆文件的思想下,进程间通信就被冠名为文件描述符(file descriptor)。
Socket 保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个 Socket 对象,然后通过 Socket 对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。
扩展资料
SOCK_STREAM类型的套接口为全双向的字节流。对于流类套接口,在接收或发送数据前必需处于已连接状态。用connect()调用建立与另一套接口的连接,连接成功后,即可用send()和recv()()传送数据。当会话结束后,调用closesocket()。带外数据根据规定用send()和recv()来接收。
实现SOCK_STREAM类型套接口的通讯协议保证数据不会丢失也不会重复。如果终端协议有缓冲区空间,且数据不能在一定时间成功发送,则认为连接中断,其后续的调用也将以WSAETIMEOUT错误返回。
SOCK_DGRAM类型套接口允许使用sendto()和recvfrom()从任意端口发送或接收数据报。如果这样一个套接口用connect()与一个指定端口连接,则可用send()和recv()与该端口进行数据报的发送与接收。
绛旓細褰撳鎴蜂娇鐢ㄥ鎺ュ瓧杩涜璺ㄧ綉缁滅殑杩炴帴鏃讹紝瀹冨氨闇瑕佺敤鍒版湇鍔″櫒璁$畻鏈虹殑IP鍦板潃鍜岀鍙f潵鎸囧畾涓鍙拌仈缃戞満鍣ㄤ笂鐨勬煇涓壒瀹氭湇鍔★紝鎵浠ュ湪浣跨敤socket浣滀负閫氫俊鐨勭粓鐐锛屾湇鍔″櫒搴旂敤绋嬪簭蹇呴』鍦ㄥ紑濮嬮氫俊涔嬪墠缁戝畾涓涓鍙o紝鏈嶅姟鍣ㄥ湪鎸囧畾鐨勭鍙g瓑寰呭鎴风殑杩炴帴銆傚彟涓涓煙AF_UNIX琛ㄧずUNIX鏂囦欢绯荤粺锛屽氨鏄枃浠惰緭鍏/杈撳嚭锛屽畠鐨勫湴鍧灏...
绛旓細瀹㈡埛绔娇鐢ㄩ殢鏈虹鍙o紝绌块廚AT鐨勬椂鍊欙紝NAT浼氫负鍏跺垎閰嶆柊绔彛锛岀劧鍚庤嚜鍔ㄥ缓绔嬬鍙f槧灏銆傝浆鎹㈠悗鐨勭鍙i殢鎶ユ枃鍙戝線鏈嶅姟绔傚緢绠鍗曠殑IP閫氫俊鍘熺悊鍟婏紝鎶ユ枃鑲畾鏈夋簮IP鍜屾簮绔彛鍙峰晩
绛旓細C# Socket 鍙戦佹暟鎹悗锛屼笉浼氭柇寮杩炴帴瀵规柟鎵嶆敹鍒帮紝涓鑸槸瀹炴椂鏀跺埌鐨勶紝鏂紑杩炴帴瀵规柟涔熻兘鏀跺埌 瀛︿範锛屾槸鎸囬氳繃闃呰銆佸惉璁层佹濊冦佺爺绌躲佸疄璺电瓑閫斿緞鑾峰緱鐭ヨ瘑鍜屾妧鑳界殑杩囩▼銆傚涔犲垎涓虹嫮涔変笌骞夸箟涓ょ:鐙箟:閫氳繃闃呰銆佸惉璁层佺爺绌躲佽瀵熴佺悊瑙c佹帰绱佸疄楠屻佸疄璺电瓑鎵嬫鑾峰緱鐭ヨ瘑鎴栨妧鑳界殑杩囩▼锛屾槸涓绉嶄娇涓綋鍙互寰楀埌鎸...
绛旓細缃戠粶鍗忚閬嶅強OSI閫氫俊妯″瀷鐨勫悇涓眰娆,浠庢垜浠潪甯哥啛鎮夌殑TCP/IP銆丠TTP銆丗TP鍗忚,鍒癘SPF銆両GP绛夊崗璁,鏈変笂鍗冪涔嬪銆傚浜庢櫘缁╃敤鎴疯岃█,涓嶉渶瑕佸叧蹇冨お澶氱殑搴曞眰閫氫俊鍗忚,鍙渶瑕佷簡瑙e叾閫氫俊鍘熺悊鍗冲彲銆傚湪瀹為檯绠$悊涓,搴曞眰閫氫俊鍗忚涓鑸細鑷姩宸ヤ綔,涓嶉渶瑕佷汉宸ュ共棰勩備絾鏄浜庣涓夊眰浠ヤ笂鐨勫崗璁,灏辩粡甯搁渶瑕佷汉宸ュ共棰勪簡,姣斿TCP/IP鍗忚灏...
绛旓細缃戠粶閫氫俊鍘熺悊鍦ㄦ枃浠朵紶杈撶▼搴忚璁′腑鐨勫簲鐢ㄧ綉缁滀笂鐨勭粷澶у鏁伴氫俊閲囩敤鐨勯兘鏄鎴锋満/鏈嶅姟鍣ㄦ満鍒(Client/Server),鍗虫湇鍔″櫒鎻愪緵鏈嶅姟,瀹㈡埛鏄繖浜涙湇鍔$殑浣跨敤鑰,鏈嶅姟鍣ㄩ鍏堝垱寤轰竴涓Socket,鐒跺悗灏嗚Socket涓庢湰鍦板湴鍧/绔彛鍙风粦瀹(Bind()),鎴愬姛涔嬪悗灏卞湪鐩稿簲鐨凷ocket涓婄洃鍚(Listen()) 銆傚綋Accept()鍑芥暟鎹曟崏鍒颁竴涓繛鎺ユ湇鍔(Connect...
绛旓細濂楁帴瀛楋紙Socket锛夛細 浣滀负鏇撮氱敤鐨勬帴鍙o紝浼犺緭鏁堢巼浣庯紝涓昏鐢ㄤ簬涓嶅悓鏈哄櫒鎴栬法缃戠粶鐨閫氫俊銆 淇″彿閲忥紙Semaphore锛夛細 甯镐綔涓轰竴绉嶉攣鏈哄埗锛岄槻姝㈡煇杩涚▼姝e湪璁块棶鍏变韩璧勬簮鏃讹紝鍏朵粬杩涚▼涔熻闂璧勬簮銆傚洜姝や富瑕佷綔涓鸿繘绋嬮棿浠ュ強鍚屼竴杩涚▼鍐呬笉鍚岀嚎绋嬩箣闂寸殑鍚屾鎵嬫銆 淇″彿锛圫ignal锛: 涓嶉傜敤浜庝俊鎭氦鎹紝鏇撮傜敤浜庤繘绋...
绛旓細涔熷氨鏄锛孨etty 鏄竴涓熀浜嶯IO鐨勫鎴凤紝鏈嶅姟鍣ㄧ缂栫▼妗嗘灦锛屽畠鍦socket鐨勫熀纭涓婃牴鎹悇绉嶅父鐢ㄧ殑搴旂敤鍗忚鍙堣繘涓姝ュ皝瑁咃紝鎻愪緵鏇翠究鍒╃殑鎺ュ彛銆傚鏋滈渶瑕佸揩閫熸惌寤轰竴涓狢/S鏈嶅姟妗嗘灦锛岄偅Netty杩囨潵鐢ㄦ槸娌¢敊銆傚弽杩囨潵浣犵殑鎯呭喌鏄渶瑕佸涔犺繖涓绋嬶紝浣犲簲璇ユ帉鎻″熀鏈殑socket缂栫▼鍙婂叾閫氫俊鍘熺悊锛屾墍浠ュ涔犳椂鐩存帴鐢╯ocket缂栫▼姣旇緝濂...
绛旓細浣犳兂瑕佹湁鎵绐佺牬,璁板緱鍋氬ソ涓や欢浜:涓鏄娊绌哄弬鍔犳濈鎴栬呭井杞殑璁よ瘉鑰冭瘯,澧炲己閫氫俊缃戠粶鎴栬呰绠楁満鏂归潰鐨勫疄璺佃兘鍔,浜屾槸绉瀬鍙傚姞瀹炶返鎬ц绋嬫垨鑰呰澶栧疄璺垫椿鍔,鍋氫竴浜涚畝鍗曠殑浼犳劅娴嬫帶绯荤粺,閫氳繃瀹炶返鐞嗚В鑷姩鎺у埗鍘熺悊銆備粠鍏蜂綋搴旂敤鐨勮搴﹀氨姣旇緝瀹规槗鐞嗚В鍟ユ槸鐗╄仈缃戙 宸茶禐杩 宸茶俯杩< 浣犲杩欎釜鍥炵瓟鐨勮瘎浠锋槸? 璇勮 鏀惰捣 ...
绛旓細Binder鏈哄埗鏄痗/s鏋舵瀯鐨,鐢盋lient銆乻erver銆丼erviceManager鍜孊inder缁勬垚.client銆乻erver鍜宻erviceManager閮芥槸鐙珛鐨勮繘绋,鐢变簬Linux杩涚▼闅旂鐨勫師鍥,鎵浠ラ渶瑕佸熷姪Binder杩涜閫氫俊.Binder閫氫俊涓昏鏈変笁涓楠:娉ㄥ唽鏈嶅姟銆佽幏鍙栨湇鍔°佷娇鐢ㄦ湇鍔.濡備笅鍥 浠庝笂涓鏉inder瀹炵幇鍘熺悊绀轰緥鍥句腑鍙互鐪嬪埌,Binder鍙垎涓篔ava Binder銆...
绛旓細鍦ㄦ湁澶氫釜瑙嗛娴佸拰闊抽娴佺殑澶氬獟浣閫氫俊绯荤粺涓,鍩轰簬UDP鍜屼笉鍙潬浼犺緭鍒╃敤IP澶氱偣骞挎挱鍜岀敱IETF瀹炴椂浼犺緭鍗忚RTP澶勭悊瑙嗛鍜岄煶棰戜俊鎭侷P澶氭挱鏄互UDP鏂瑰紡杩涜涓嶅彲闈犲鐐瑰箍鎾紶杈撶殑鍗忚銆俁TP宸ヤ綔浜嶪P澶氭挱鐨勯《灞,鐢ㄤ簬澶勭悊IP缃戜笂鐨勮棰戝拰闊抽娴,姣忎釜UDP鍖呭潎鍔犱笂涓涓寘鍚椂闂存埑鍜屽簭鍙风殑鎶ュご銆傝嫢鎺ユ敹绔厤浠ラ傚綋鐨勭紦鍐,閭d箞瀹冨氨鍙互...