C++TCP和UDP屬于傳輸層協議

TCP和UDP屬于傳輸層協議。其中TCP提供IP環境下的數據可靠傳輸,它事先為要發送的數據開辟好連接通道(三次握手),然后再進行數據發送;而UDP則不為IP提供可靠性,一般用于實時的視頻流傳輸,像rtp、rtsp就是建立在udp的基礎上的。

???? 首先談談tcp socket

??? tcp簡單的三次握手過程如圖,

??? SYN(Synchronize Sequence Numbers):同步標志  

??? ACK(Acknowledgement Number)????????:確認標志

??? 圖中可以看出,三次握手的過程是在c的connect()和s的bind()、listen()、accept()函數中完成的,這樣開辟了相對可靠的連接通道,來傳輸數據。

UDP的socket編程過程如下圖所示:

下面翠花上代碼啦!大笑

服務端:

[cpp] view plaincopyprint?
  1. #include?<stdio.h> ??
  2. #include?<Winsock2.h>?//windows?socket的頭文件 ??
  3. ??
  4. #pragma?comment(?lib,?"ws2_32.lib"?)//?鏈接Winsock2.h的靜態庫文件 ??
  5. ??
  6. void?main()??
  7. {??
  8. ????//初始化winsocket ??
  9. ????WORD?wVersionRequested;??
  10. ????WSADATA?wsaData;??
  11. ????int?err;??
  12. ??
  13. ????wVersionRequested?=?MAKEWORD(?1,?1?);//第一個參數為低位字節;第二個參數為高位字節 ??
  14. ??
  15. ????err?=?WSAStartup(?wVersionRequested,?&wsaData?);//對winsock?DLL(動態鏈接庫文件)進行初始化,協商Winsock的版本支持,并分配必要的資源。 ??
  16. ????if?(?err?!=?0?)??
  17. ????{??
  18. ????????return;??
  19. ????}??
  20. ??
  21. ????if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||HIBYTE(?wsaData.wVersion?)?!=?1?)//LOBYTE()取得16進制數最低位;HIBYTE()取得16進制數最高(最左邊)那個字節的內容?????? ??
  22. ????{??
  23. ????????WSACleanup(?);??
  24. ????????return;??
  25. ????}??
  26. ??
  27. ????SOCKET?sockSrv=socket(AF_INET,SOCK_STREAM,0);//創建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,對應tcp;0指定網絡協議為TCP/IP ??
  28. ??
  29. ????SOCKADDR_IN?addrSrv;???
  30. ????addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);?//htonl用來將主機字節順序轉換為網絡字節順序(to?network?long) ??
  31. ????//INADDR_ANY就是指定地址為0.0.0.0的地址, ??
  32. ????//表示不確定地址,或“任意地址”。” ??
  33. ????addrSrv.sin_family=AF_INET;???
  34. ????addrSrv.sin_port=htons(4000);//htons用來將主機字節順序轉換為網絡字節順序(to?network?short) ??
  35. ??
  36. ????bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//將本地地址綁定到所創建的socket上,以使在網絡上標識該socket ??
  37. ??
  38. ????listen(sockSrv,5);//socket監聽,準備接受連接請求。 ??
  39. ??
  40. ????SOCKADDR_IN?addrClient;??
  41. ????int?len=sizeof(SOCKADDR);??
  42. ??
  43. ????while(1)??
  44. ????{??
  45. ????????SOCKET?sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//為一個連接請求提供服務。addrClient包含了發出連接請求的客戶機IP地址信息;返回的新socket描述服務器與該客戶機的連接 ??
  46. ??
  47. ????????char?sendBuf[50];??
  48. ????????sprintf(sendBuf,"Welcome?%s?to?here!",inet_ntoa(addrClient.sin_addr));//inet_ntoa網絡地址轉換轉點分十進制的字符串指針 ??
  49. ????????send(sockConn,sendBuf,strlen(sendBuf)+1,0);??
  50. ??
  51. ????????char?recvBuf[50];??
  52. ????????recv(sockConn,recvBuf,50,0);??
  53. ????????printf("%s\n",recvBuf);??
  54. ??
  55. ????????closesocket(sockConn);??
  56. ????????Sleep(2000);//2000毫秒 ??
  57. ????}??
  58. ????WSACleanup();??
  59. }??
#include <stdio.h>
#include <Winsock2.h> //windows socket的頭文件
#pragma comment( lib, "ws2_32.lib" )// 鏈接Winsock2.h的靜態庫文件
void main()
{
//初始化winsocket
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );//第一個參數為低位字節;第二個參數為高位字節
err = WSAStartup( wVersionRequested, &wsaData );//對winsock DLL(動態鏈接庫文件)進行初始化,協商Winsock的版本支持,并分配必要的資源。
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16進制數最低位;HIBYTE()取得16進制數最高(最左邊)那個字節的內容		
{
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//創建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,對應tcp;0指定網絡協議為TCP/IP
SOCKADDR_IN addrSrv; 
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);	//htonl用來將主機字節順序轉換為網絡字節順序(to network long)
//INADDR_ANY就是指定地址為0.0.0.0的地址,
//表示不確定地址,或“任意地址”。”
addrSrv.sin_family=AF_INET; 
addrSrv.sin_port=htons(4000);//htons用來將主機字節順序轉換為網絡字節順序(to network short)
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//將本地地址綁定到所創建的socket上,以使在網絡上標識該socket
listen(sockSrv,5);//socket監聽,準備接受連接請求。
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//為一個連接請求提供服務。addrClient包含了發出連接請求的客戶機IP地址信息;返回的新socket描述服務器與該客戶機的連接
char sendBuf[50];
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));//inet_ntoa網絡地址轉換轉點分十進制的字符串指針
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[50];
recv(sockConn,recvBuf,50,0);
printf("%s\n",recvBuf);
closesocket(sockConn);
Sleep(2000);//2000毫秒
}
WSACleanup();
}


客戶端:

?

[cpp] view plaincopyprint?
  1. #include?<stdio.h> ??
  2. #include?<Winsock2.h> ??
  3. ??
  4. #pragma?comment(?lib,?"ws2_32.lib"?)? ??
  5. ??
  6. ??
  7. void?main()??
  8. {??
  9. ????WORD?wVersionRequested;??
  10. ????WSADATA?wsaData;??
  11. ????int?err;??
  12. ??
  13. ????wVersionRequested?=?MAKEWORD(?1,?1?);//第一個參數為低位字節;第二個參數為高位字節 ??
  14. ??
  15. ????err?=?WSAStartup(?wVersionRequested,?&wsaData?);//對winsock?DLL(動態鏈接庫文件)進行初始化,協商Winsock的版本支持,并分配必要的資源。 ??
  16. ????if?(?err?!=?0?)??
  17. ????{??
  18. ????????return;??
  19. ????}??
  20. ??
  21. ????if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||HIBYTE(?wsaData.wVersion?)?!=?1?)//LOBYTE()取得16進制數最低位;HIBYTE()取得16進制數最高(最左邊)那個字節的內容?????? ??
  22. ????{??
  23. ????????WSACleanup(?);??
  24. ????????return;??
  25. ????}??
  26. ????for(int?index=0;;index++)??
  27. ????{??
  28. ????????SOCKET?sockClient=socket(AF_INET,SOCK_STREAM,0);??
  29. ??
  30. ????????SOCKADDR_IN?addrClt;//需要包含服務端IP信息 ??
  31. ????????addrClt.sin_addr.S_un.S_addr=inet_addr("192.168.0.30");//?inet_addr將IP地址從點數格式轉換成網絡字節格式整型。 ??
  32. ????????addrClt.sin_family=AF_INET;???
  33. ????????addrClt.sin_port=htons(4000);??
  34. ??
  35. ????????connect(sockClient,(SOCKADDR*)&addrClt,sizeof(SOCKADDR));//客戶機向服務器發出連接請求 ??
  36. ????????char?recvBuf[50];??
  37. ????????recv(sockClient,recvBuf,50,0);??
  38. ????????printf("my?reply?is?:?%s\n",recvBuf);??
  39. ??
  40. ????????char?sendBuf[50];??
  41. ????????sprintf(sendBuf,"%3d,",index);??
  42. ????????strcat(sendBuf,"server?node?of:?yaopeng");??
  43. ????????send(sockClient,sendBuf,strlen(sendBuf)+1,0);??
  44. ??
  45. ????????closesocket(sockClient);??
  46. ????????Sleep(2000);??
  47. ????}??
  48. ????WSACleanup();??
  49. }??
#include <stdio.h>
#include <Winsock2.h>
#pragma comment( lib, "ws2_32.lib" ) 
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );//第一個參數為低位字節;第二個參數為高位字節
err = WSAStartup( wVersionRequested, &wsaData );//對winsock DLL(動態鏈接庫文件)進行初始化,協商Winsock的版本支持,并分配必要的資源。
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16進制數最低位;HIBYTE()取得16進制數最高(最左邊)那個字節的內容		
{
WSACleanup( );
return;
}
for(int index=0;;index++)
{
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrClt;//需要包含服務端IP信息
addrClt.sin_addr.S_un.S_addr=inet_addr("192.168.0.30");// inet_addr將IP地址從點數格式轉換成網絡字節格式整型。
addrClt.sin_family=AF_INET; 
addrClt.sin_port=htons(4000);
connect(sockClient,(SOCKADDR*)&addrClt,sizeof(SOCKADDR));//客戶機向服務器發出連接請求
char recvBuf[50];
recv(sockClient,recvBuf,50,0);
printf("my reply is : %s\n",recvBuf);
char sendBuf[50];
sprintf(sendBuf,"%3d,",index);
strcat(sendBuf,"server node of: yaopeng");
send(sockClient,sendBuf,strlen(sendBuf)+1,0);
closesocket(sockClient);
Sleep(2000);
}
WSACleanup();
}



?

對于tcp socket,有幾點需要注意:

一、TCP的TIME_WAIT狀態(等待客戶端的相應)????

注*? TIME_WAIT 狀態最大保持時間是2 * MSL,也就是1-4分鐘(MSL是最大分段生存期,指明TCP報文在Internet上最長生存時間)

??? 當服務器端socket綁定本地地址并占用了端口,此時如果匆忙結束;或者連接的服務器異常退出,這個時候被占用的端口不能馬上釋放,需要TIME_WAIT。即便調用closesocket()一般也不會立即關閉socket,仍可繼續重用該socket。所以重新啟動服務器時可能會出現問題。例如MFC中在子窗口中實現socket通信,那么關閉子窗口再打開就會出問題了。

??? ?解決方法是在bind()之前添加setsockopt()函數,解除端口綁定。

介紹setsockopt()之前我們再來回顧一下三次握手協議的具體流程:

第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀態,等待服務器確認;?
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;?
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。?

完成三次握手,客戶端與服務器開始傳送數據。

setsockopt()使用方法如下:

??? 1. 如果在已經處于 ESTABLISHED狀態下的socket(一般由端口號和標志符區分)調用closesocket(一般不會立即關閉而經歷TIME_WAIT的過程)后想繼續重用該socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));

??? 2. 如果要已經處于連接狀態的soket在調用closesocket后強制關閉,不經歷TIME_WAIT的過程:
BOOL??bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));

更多setsockopt()函數用例可參考百度百科:http://baike.baidu.com/view/569217.htm

?

?二、對于大型文件,一般需要將其剁碎了一部分一部分的傳。TCP不能保證接收方順序的收到包,對于需要實時顯示的文件可以在發送方發出包后設置來自接收方的響應,即對方收到前一個包后再發送下一個包。

目前就這么多,各位看官有其他的注意事項拜托請留言補充,小弟感激啊。

?

下面簡單說下UDP socket

??? UDP不能保證雙方的可靠連接,容易出現丟包現象。

??? UDP的socket編程過程如下圖所示:

?

上代碼了,哈哈。

服務端:

[cpp] view plaincopyprint?
  1. #include?<stdio.h> ??
  2. #include?<Winsock2.h> ??
  3. ??
  4. #pragma?comment(?lib,?"ws2_32.lib"?)? ??
  5. ???
  6. void?main()??
  7. {??
  8. ????WORD?wVersionRequested;??
  9. ????WSADATA?wsaData;??
  10. ????int?err;??
  11. ??
  12. ????wVersionRequested?=?MAKEWORD(?1,?1?);???
  13. ??
  14. ????err?=?WSAStartup(?wVersionRequested,?&wsaData?);???
  15. ????if?(?err?!=?0?)?{??
  16. ????????return;??
  17. ????}??
  18. ??
  19. ????if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||??
  20. ????????HIBYTE(?wsaData.wVersion?)?!=?1?)?{???
  21. ????????????WSACleanup(?);??
  22. ????????????return;??
  23. ????}??
  24. ????SOCKET?sockSrv=socket(AF_INET,SOCK_DGRAM,0);??
  25. ??????
  26. ????int?len=sizeof(SOCKADDR);??
  27. ??????
  28. ????SOCKADDR_IN?from;?????
  29. ????SOCKADDR_IN?local;???
  30. ????local.sin_addr.S_un.S_addr=htonl(INADDR_ANY);???
  31. ????local.sin_family=AF_INET;???
  32. ????local.sin_port=htons(27015);???
  33. ??
  34. ????int?a?=?bind(sockSrv,(SOCKADDR*)&local,len);??
  35. ???
  36. ??????
  37. ??
  38. ????while(1)??
  39. ????{??
  40. ????????char?recvBuf[50];??
  41. ????????recvfrom(sockSrv,recvBuf,50,0,(SOCKADDR*)&from,&len);//from收到客戶端的IP信息 ??
  42. ????????printf("%s\n",recvBuf);??
  43. ????????printf("%s\n",inet_ntoa(local.sin_addr));??
  44. ????????char?sendBuf[50];??
  45. ????????sprintf(sendBuf,"Welcome?%s?to?here!",inet_ntoa(from.sin_addr));????
  46. ????????sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&from,len);??
  47. ??????????
  48. ????????Sleep(2000);??
  49. ????}??
  50. ????closesocket(sockSrv);??
  51. ????WSACleanup();??
  52. }??
#include <stdio.h>
#include <Winsock2.h>
#pragma comment( lib, "ws2_32.lib" ) 
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); 
err = WSAStartup( wVersionRequested, &wsaData ); 
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) { 
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
int len=sizeof(SOCKADDR);
SOCKADDR_IN from;	
SOCKADDR_IN local; 
local.sin_addr.S_un.S_addr=htonl(INADDR_ANY); 
local.sin_family=AF_INET; 
local.sin_port=htons(27015); 
int a = bind(sockSrv,(SOCKADDR*)&local,len);
while(1)
{
char recvBuf[50];
recvfrom(sockSrv,recvBuf,50,0,(SOCKADDR*)&from,&len);//from收到客戶端的IP信息
printf("%s\n",recvBuf);
printf("%s\n",inet_ntoa(local.sin_addr));
char sendBuf[50];
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(from.sin_addr));  
sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&from,len);
Sleep(2000);
}
closesocket(sockSrv);
WSACleanup();
}


客戶端:

[cpp] view plaincopyprint?
  1. #include?<stdio.h> ??
  2. #include?<Winsock2.h> ??
  3. ??
  4. #pragma?comment(?lib,?"ws2_32.lib"?)? ??
  5. ??
  6. ??
  7. void?main()??
  8. {??
  9. ????WORD?wVersionRequested;??
  10. ????WSADATA?wsaData;??
  11. ????int?err;??
  12. ??
  13. ????wVersionRequested?=?MAKEWORD(?1,?1?);???
  14. ??
  15. ????err?=?WSAStartup(?wVersionRequested,?&wsaData?);???
  16. ????if?(?err?!=?0?)?{??
  17. ????????return;??
  18. ????}??
  19. ??
  20. ????if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||??
  21. ????????HIBYTE(?wsaData.wVersion?)?!=?1?)?{???
  22. ????????????WSACleanup(?);??
  23. ????????????return;??
  24. ????}??
  25. ??????
  26. ??
  27. ????for(int?index=0;;index++)??
  28. ????{??
  29. ????????SOCKET?sockClient=socket(AF_INET,SOCK_DGRAM,0);??
  30. ??
  31. ????????int?len?=?sizeof(SOCKADDR);??
  32. ??
  33. ????????SOCKADDR_IN?local;??
  34. ????????local.sin_addr.S_un.S_addr=inet_addr("192.168.0.30");???
  35. ????????local.sin_family=AF_INET;???
  36. ????????local.sin_port=htons(27015);???
  37. ???
  38. ????????char?sendBuf[30];??
  39. ????????sprintf(sendBuf,"%3d,",index);??
  40. ????????strcat(sendBuf,"server?node?of:?yaopeng");??
  41. ????????sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&local,len);??
  42. ??
  43. ????????char?recvBuf[50];??
  44. ????????recvfrom(sockClient,recvBuf,50,0,(SOCKADDR*)&local,&len);??
  45. ????????printf("my?reply?is?:?%s\n",recvBuf);??
  46. ????????printf("%s\n",inet_ntoa(local.sin_addr));??
  47. ??
  48. ????????closesocket(sockClient);??
  49. ????????Sleep(2000);??
  50. ????????WSACleanup();??
  51. ????}??
  52. }??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388542.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

程序員如何利用空閑時間掙零花錢

一&#xff1a; 私活 作為一名程序員&#xff0c;在上班之余&#xff0c;我們有大把的時間&#xff0c;不能浪費&#xff0c;這些時間其實都是可以用來挖掘自己潛在的創造力&#xff0c;今天要討論的話題就是&#xff0c;程序員如何利用空余時間掙零花錢&#xff1f;比如說周末…

編寫程序乘法口訣表C語言,陳廣川問:c語言編程九九乘法口訣表 怎樣用c語言寫九九乘法口訣表?...

怎樣用c語言寫九九乘法口訣表&#xff1f;哈哈&#xff0c;我剛剛用javascript寫好乘法口訣表。C語言&#xff0c;如何編寫程序輸出九九乘法表。形式如下 ********* ******** ******* ****** ***** **** *** ** *&#xff1f;兩個循環&#xff0c;一般用for循環 一個循環控制行…

PHP中文亂碼解決辦法

一&#xff0e;首先是PHP網頁的編碼 1. php文件本身的編碼與網頁的編碼應匹配 a. 如果欲使用gb2312編碼&#xff0c;那么php要輸出頭&#xff1a;header(“Content-Type: text/html; charsetgb2312")&#xff0c;靜態頁面添加<meta http-equiv"Content-T…

python中api_通過Python中的API查找相關的工作技能

python中api工作技能世界 (The World of Job Skills) So you want to figure out where your skills fit into today’s job market. Maybe you’re just curious to see a comprehensive constellation of job skills, clean and standardized. Or you need a taxonomy of ski…

欺詐行為識別_使用R(編程)識別欺詐性的招聘廣告

欺詐行為識別背景 (Background) Online recruitment fraud (ORF) is a form of malicious behaviour that aims to inflict loss of privacy, economic damage or harm the reputation of the stakeholders via fraudulent job advertisements.在線招聘欺詐(ORF)是一種惡意行為…

PE文件的感染C++源代碼

PE文件的感染C源代碼 PE文件規定了可執行文件的格式&#xff0c;凡是符合此格式的文件都能在windows系統上運行。PE文件的格式暫且不談&#xff0c;說一些感染PE文件的幾種途徑。 導入表感染。這個涉及比較復雜的操作&#xff0c;首先&#xff0c;要自行寫一個dll文件&#x…

c語言實驗四報告,湖北理工學院14本科C語言實驗報告實驗四數組

湖北理工學院14本科C語言實驗報告實驗四 數組.doc實驗四 數 組實驗課程名C語言程序設計專業班級 14電氣工程2班 學號 201440210237 姓名 熊帆 實驗時間 5.12-5.26 實驗地點 K4-208 指導教師 祁文青 一、實驗目的和要求1. 掌握一維數組和二維數組的定義、賦值和輸入輸出的方法&a…

c語言宏定義

一. #define是C語言中提供的宏定義命令&#xff0c;其主要目的是為程序員在編程時提供一定的方便&#xff0c;并能在一定程度上提高程序的運行效率&#xff0c;但學生在學習時往往不能理解該命令的本質&#xff0c;總是在此處產生一些困惑&#xff0c;在編程時誤用該命令&#…

rabbitmq channel參數詳解【轉】

1、Channel 1.1 channel.exchangeDeclare()&#xff1a; type&#xff1a;有direct、fanout、topic三種durable&#xff1a;true、false true&#xff1a;服務器重啟會保留下來Exchange。警告&#xff1a;僅設置此選項&#xff0c;不代表消息持久化。即不保證重啟后消息還在。原…

感染EXE文件代碼(C++)

C代碼#include <windows.h> #include <winnt.h> #include <stdio.h> #include <assert.h> #define DEBUG 1 #define EXTRA_CODE_LENGTH 18 #define SECTION_SIZE 0x1000 #define SECTION_NAME ".eViLhsU" #define F…

nlp gpt論文_GPT-3:NLP鎮的最新動態

nlp gpt論文什么是GPT-3&#xff1f; (What is GPT-3?) The launch of Open AI’s 3rd generation of the pre-trained language model, GPT-3 (Generative Pre-training Transformer) has got the data science fraternity buzzing with excitement!Open AI的第三代預訓練語言…

真實不裝| 阿里巴巴新人上路指北

新手上路&#xff0c;總想聽聽前輩們分享他們走過的路。橙子選取了阿里巴巴合伙人逍遙子&#xff08;阿里巴巴集團CEO&#xff09; 、Eric&#xff08;螞蟻金服董事長兼CEO&#xff09;、Judy&#xff08;阿里巴巴集團CPO&#xff09;的幾段分享&#xff0c;他們是如何看待職場…

小程序學習總結

上個周末抽空了解了一下小程序,現在將所學所感記錄以便日后翻看;需要指出的是我就粗略過了下小程序的api了解了下小程序的開發流程以及工具的使用,然后寫了一個小程序的demo;在我看來,如果有前端基礎學習小程序無異于錦上添花了,而我這個三年的碼農雖也寫過不少前端代碼但離專業…

tomcat java環境配置

jsp 環境變量配置 一、配置JDK 首先&#xff0c;從Sun網站上下載jdk。 雙擊jdk-1_5_0_04-windows-i586-p.exe開始安裝&#xff0c;默認安裝到C:/Program Files/Java/jdk1.5.0_04&#xff0c;你也可以更改路徑&#xff0c;但要記住最后選擇的路徑&#xff0c;設置環境變量的時候…

uber 數據可視化_使用R探索您在Uber上的活動:如何分析和可視化您的個人數據歷史記錄

uber 數據可視化Perhaps, dear reader, you are too young to remember that before, the only way to request a particular transport service such as a taxi was to raise a hand to make a signal to an available driver, who upon seeing you would stop if he was not …

java B2B2C springmvc mybatis電子商城系統(四)Ribbon

2019獨角獸企業重金招聘Python工程師標準>>> 一&#xff1a;Ribbon是什么&#xff1f; Ribbon是Netflix發布的開源項目&#xff0c;主要功能是提供客戶端的軟件負載均衡算法&#xff0c;將Netflix的中間層服務連接在一起。Ribbon客戶端組件提供一系列完善的配置項如…

c語言函數的形參有幾個,C中子函數最多有幾個形參

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓C89 31個&#xff0c;C99 127個。ANSI C892.2.4.1 Translation limitsThe implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following lim…

Linux上Libevent的安裝

1、下載wget -O libevent-2.0.21-stable.tar.gz https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz2、解壓 tar zxvf libevent-2.0.21-stable.tar.gz3、配置安裝路徑 cd libevent-2.0.21-stable ./configure -prefix/usr4、編譯并安裝 make make …

Win7安裝oracle 10 g

開始-運行-輸入hdwwiz-回車 ——選則手動 ——網絡適配器——左邊選Microsoft&#xff0c;右邊找到Microsoft Loopback Adapter ——完成 打開 控制面板\網絡和 Internet\網絡和共享中心 會發現多了一個本地連接 點詳細信息 發現是Microsoft Loopback Adapter的。…

基于plotly數據可視化_[Plotly + Datashader]可視化大型地理空間數據集

基于plotly數據可視化簡介(我們將創建的內容)&#xff1a; (Introduction (what we’ll create):) Unlike the previous tutorials in this map-based visualization series, we will be dealing with a very large dataset in this tutorial (about 2GB of lat, lon coordinat…