tcp通訊的基本思路是服務端監聽乙個埠,然後客戶端連線這個埠(三次握手),建立連線後連線的資訊儲存在套接字(socket)中,使用send和recv進行資料的傳輸,因為tcp底層實現有錯誤校驗,所以對比udp方式傳輸穩定性,準確性較好,同時速度也較慢。
#include
#ifdef win32
//windows下使用的標頭檔案
#include
//引用靜態庫
#pragma comment
(lib,
"ws2_32.lib"
)#else
//linux下的標頭檔案
#include
#include
#endif // win32
//執行緒函式
dword
winapi
threadfunc
(void
* param)
printf
("recv: %s\n"
, szrecvbuf)
;
char szsendbuf[
1024];
sprintf_s
(szsendbuf,
"hello client!");
//像客戶端傳送資料
send
(connsocket, szsendbuf,
strlen
(szsendbuf)+1
,0);
//關閉連線
closesocket
(connsocket)
;return0;
} int main()
//繫結監聽位址和埠
sockaddr_in addrserv;
addrserv.sin_family =
af_inet
;//表示使用ipv4
addrserv.sin_addr.s_un.s_addr =
htonl
(inaddr_any);
//表示監聽本機所有網絡卡的ip位址
addrserv.sin_port =
htons
(6666);
//監聽6666埠if(
bind
(s,(
sockaddr*)
&addrserv,
sizeof
(sockaddr))
==socket_error
)//開始監聽if(
listen
(s,5))
printf
("服務端初始化完成!等待連線...\n");
//等待連線
sockaddr_in clientaddr;
//用來儲存連線上來的客戶端的資訊
int nlen =
sizeof
(sockaddr);
while
(true
)}
#include
#ifdef win32
//windows下使用的標頭檔案
#include
//引用靜態庫
#pragma comment
(lib,
"ws2_32.lib"
)#else
//linux下的標頭檔案
#include
#include
#endif // win32
int main()
//設定服務端的位址和埠
sockaddr_in addrserv;
addrserv.sin_family =
af_inet
;//表示使用ipv4
addrserv.sin_addr.s_un.s_addr =
inet_addr
("127.0.0.1");
//服務端位址
addrserv.sin_port =
htons
(6666);
//連線6666埠
//連線if(
connect
(s,(
sockaddr*)
&addrserv,
sizeof
(sockaddr))
==socket_error)
char szbuf[
1024];
sprintf_s
(szbuf,
"hello server!");
//傳送
send
(s, szbuf,
strlen
(szbuf)+1
,0);
memset
(szbuf,0,
1024);
//接收
int nrecv =
recv
(s, szbuf,
1024,0
);printf
("recv: %s\n"
, szbuf)
;closesocket
(s);
return0;
}
tcp協議很多語言都支援,不是c++寫的客戶端也能連
例如python:
#!
/usr/bin/python3
# 檔名:client.py
# 匯入 socket、sys 模組
import socket
import sys
# 建立 socket 物件
s = socket.
socket
(socket.
af_inet
, socket.
sock_stream
) # 連線服務,指定主機和埠
s.connect((
"127.0.0.1"
,6666))
msg =
"hello server!"
s.send
(msg.
encode
("gbk"))
# 接收小於 1024 位元組的資料
msg = s.
recv
(1024)s.
close()
print
(msg.
decode
('gbk'
))
Socket學習筆記
public classsocketextends object 此類實現客戶端套接字 也可以就叫 套接字 套接字是兩台機器之間的通訊端點。套接字的實際工作由socketimpl類的例項執行。應用程式通過更改建立套接字實現的套接字工廠可以配置它自身,以建立適合本地防火牆的套接字。一 建構函式 soc...
socket學習筆記
為了理清思路,做一些小筆記 1 socket流程 int socket 產生了該socket的描述符socket description bind 主動呼叫時,把socket與埠繫結,如果不主動呼叫,在linsten和connect時,會自動隨機分配乙個埠。server端在socket和bind之後...
Socket學習筆記
插板插座 網路套接字 在通訊過程中,套接字一定是成對存在的 兩份套接字,c乙個 s乙個 乙個檔案描述符指向乙個套接字 該套接字內部由核心借助兩個緩衝區實現 網路位元組序 大端法 例如udp段格式,位址0 1是16位的源埠號,如果這個埠號是1000 0x3e8 則位址0是0x03,位址1是0xe8,也...