導航:首頁 > 網路連接 > 計算機網路socket

計算機網路socket

發布時間:2022-01-06 11:30:31

❶ 由路由器連接的電腦如何socket實現網路通信

關鍵在路由器上!如果想讓你的程序從既能從內部區域網訪問,也能外部網路訪問,那你必須:
1)在路由器增加一個路由項,這個路由項由將{外網IP:埠}映射到{你計算機內網IP:埠}
2)你的計算機上仍然使用{內網IP:埠}

❷ TCP/IP和Socket 是什麼關系啊

TCP協議是可靠的傳輸協議,TCP在通訊前需要先進過三次握手建立連接,而Socket就代表這個連接,由埠號+iP地址組成

❸ socket是什麼呀

套接字(Socket),就是對網路中不同主機上的應用進程之間進行雙向通信的端點的抽象。

一個套接字就是網路上進程通信的一端,提供了應用層進程利用網路協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網路協議棧,是應用程序通過網路協議進行通信的介面,是應用程序與網路協議根進行交互的介面。

套接字是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。

可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網路間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。

套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。

Socket(套接字)可以看成是兩個網路應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網路環境中進程間通信的API(應用程序編程介面),也是可以被命名和定址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。

通信時其中一個網路應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網路介面卡(NIC)相連的傳輸介質將這段信息送到另外一台主機的 Socket中,使對方能夠接收到這段信息。

Socket是由IP地址和埠結合的,提供向應用層進程傳送數據包的機制。

類型

1、數據報套接字

無連接套接字,使用用戶數據報協議(UDP)。在數據報套接字上發送或接收的每個數據包都單獨定址和路由。數據報套接字不能保證順序和可靠性,因此從一台機器或進程發送到另一台機器或進程的多個數據包可能以任何順序到達或可能根本不到達。在數據報套接字上發送廣播可能需要特殊配置。

為了接收廣播數據包,數據報套接字不應該綁定到特定地址,盡管在某些實現中,當數據報套接字綁定到特定地址時也可能接收廣播數據包。

2、流套接字

面向連接的套接字,使用傳輸控制協議(TCP)、流控制傳輸協議(SCTP) 或數據報擁塞控制協議(DCCP)。流套接字提供了無記錄邊界的有序且獨特的無錯誤數據流,並具有用於創建和銷毀連接以及報告錯誤的明確定義的機制。

流套接字以帶外功能可靠地、有序地傳輸數據。在 Internet 上,流套接字通常使用 TCP 實現,以便應用程序可以使用 TCP/IP 協議在任何網路上運行。

3、原始套接字

允許直接發送和接收 IP 數據包,無需任何特定於協議的傳輸層格式。對於其他類型的套接字,根據選擇的傳輸層協議(例如 TCP、UDP)自動封裝有效載荷,並且套接字用戶不知道與有效載荷一起廣播的協議頭的存在。從原始套接字讀取時,通常包含標頭。

從原始套接字傳輸數據包時,自動添加標頭是可選的。

大多數套接字應用程序編程介面(API),例如基於Berkeley 套接字的那些,支持原始套接字。Windows XP於 2001 年發布,在Winsock介面中實現了原始套接字支持,但三年後,微軟出於安全考慮限制了 Winsock 的原始套接字支持。

原始套接字用於與安全相關的應用程序,如Nmap。原始套接字的一個用例是在用戶空間中實現新的傳輸層協議。

原始套接字通常在網路設備中可用,用於路由協議,例如Internet 組管理協議(IGMP) 和開放最短路徑優先(OSPF),以及用於Internet 控制消息協議(ICMP) 等事情,由ping 實用程序。

以上內容參考網路-套接字

❹ 網路間的通信需要ip以及埠,那麼socket又是幹嘛的呢

socket是插座,就是用有線連接的方式保證網路間的通信。比如計算機的網路插座socket,就是用網線將計算機與計算機之間連接起來。

❺ 在同一個計算機上怎麼實現socket方法

首先,需要弄懂socket的工作機制,無需裝什麼虛擬機。
大致的思路是這樣:
一、伺服器端,將socket綁定在本地IP的某個埠,如6000;啟動監聽並開始接受客戶端。
二、客戶端,創建socket以後,連接到本地IP的6000埠,這樣就可以了。
三、然後,雙方收發數據。

注意:給本地伺服器發送數據,網路協議並不將數據發送到網卡上,所以這種類型的數據流是不會出現在網路上的。其他方面的特性和遠端通信是差不多的。

計算機網路課設 socket 編程

目的及要求:熟悉ICMP協議的作用,利用ICMP的回送請求和回送應答來進行檢測出到達網路上任何一台目的主機途中所經過的路由器,並將結果顯示在標准輸出上。通過本實驗,使學生更加熟悉ICMP報文的結構,對ICMP協議有更好的理解和認識。l 具體內容(1)定義好IP分組、ICMP報文相關的數據結構;(2)在WINDOWS環境下實現程序;(3)在命令提示符下輸入:「mytrace IP地址 或 主機名 或 域名」;數)持續發送ICMP回送請求數據包,其中的IP首部TTL欄位依次增加,如果是中途路由器收到TTL為0的IP分組後,將會發回超時的錯誤報告ICMP響應報文,如果到達最後的主機,將會發回ICMP回送應答

❼ 如何用SOCKET實現兩台計算機之間的通訊

兩部分代碼,一個server,一個client。

server 端代碼:

#include"stdio.h"
#include"Winsock2.h"
#include"iostream"
#include"string"

//#pragmacomment(lib,"ws2_32.lib")

//definehostIPansableport.
#defineHOST_IP127.0.0.1
#defineHOST_PORT8080
#defineOK_STR"OK"

voidmain(){
//theversionbitofWinsock
intversion_a=1;//lowbit
intversion_b=1;//highbit

//makeword
WORDversionRequest=MAKEWORD(version_a,version_b);
WSADatawsaData;
interr;

err=WSAStartup(versionRequest,&wsaData);

if(err!=0){
printf("ERROR!");
return;
}

if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
printf("WRONGWINSOCKVERSION!");
WSACleanup();
return;
}


SOCKETsocServer=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INaddr_Srv;

//It'snestthreestructsasS_un_b,S_un_wandS-un.(union)
addr_Srv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//setprotocolfamily
addr_Srv.sin_family=AF_INET;
//sethostport
addr_Srv.sin_port=htons(HOST_PORT);
//bindsockettothehost
bind(socServer,(SOCKADDR*)&addr_Srv,sizeof(SOCKADDR));
//addressofaclient
SOCKADDR_INaddr_Clt;
charrecvBuf[100];
intfromlen=sizeof(SOCKADDR);
while(true){
recvfrom(socServer,recvBuf,100,0,(SOCKADDR*)&addr_Clt,&fromlen);std::cout<<recvBuf<<std::endl;
sendto(socServer,OK_STR,strlen(OK_STR)+1,0,(SOCKADDR*)&addr_Clt,sizeof(SOCKADDR));
}
closesocket(socServer);
WSACleanup();
}

client端代碼:

#include"Winsock2.h"
#include"iostream"
#include"stdio.h"
#pragmacomment(lib,"ws2_32.lib")


#defineHOST_IP"127.0.0.1"
#defineHOST_PORT8080

voidmain(){
//theversionbitofWinsock
intversion_a=1;//lowbit
intversion_b=1;//highbit
//makeword
WORDversionRequest=MAKEWORD(version_a,version_b);
WSADatawsaData;
interror;
error=WSAStartup(versionRequest,&wsaData);
if(error!=0){
printf("ERROR!");
return;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
printf("WRONGWINSOCKVERSION!");
WSACleanup();
return;
}
//requestinfoobtainedbyuser'sinput
charrequestStr[100];
//buildasockeet
SOCKETsocClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;//settheprotocolfamily
addrSrv.sin_port=htons(HOST_PORT);//settheportnumber
//.
charcRecvBuf[100];
while(true){
std::cin>>requestStr;
//
sendto(socClient,requestStr,strlen(requestStr)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
recv(socClient,cRecvBuf,strlen(cRecvBuf)+1,0);
std::cout<<cRecvBuf<<std::endl;
}

//
closesocket(socClient);
WSACleanup();
//return0;
}

❽ 計算機網路socket linux下用c或c++寫

/*伺服器*/
#include <arpa/inet.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#define szSTR 256
#define SERVERPORT 21429 /*please modify the port with your id*/

int do_listen(const int port, const int bTcp)
{
int s = 0, r = 0, o = 1;
struct sockaddr_in h;
memset(&h, 0, sizeof(h));
h.sin_family = AF_INET; h.sin_port = htons(port);
h.sin_addr.s_addr = INADDR_ANY;
s = socket(AF_INET, bTcp?SOCK_STREAM:SOCK_DGRAM, 0);
if (s < 1) { perror("socket(listen)"); return 0;}
r = setsockopt(s, SOL_SOCKET,SO_REUSEADDR, (char *)&o, sizeof(int));
if (r == -1) { perror("setsockopt(listen)"); return 0;}
r = bind(s, (struct sockaddr *)&h, sizeof(h));
if (r == -1) { perror("bind(listen)"); return 0;}
if (bTcp) {
r = listen(s, SOMAXCONN);
if (r == -1) { perror("listen()"); return 0;}
}/*end if*/
/*signal(SIGPIPE, SIG_IGN);*/
return s;
}/*end do_listen*/

void response(int sck, struct sockaddr_in * host)
{
FILE * f = 0; char cmd[szSTR]; time_t now;
struct tm * t = 0;
f = fdopen(sck, "w+");
while(!feof(f)) {
memset(cmd, 0, szSTR);
fgets(cmd, szSTR -1, f);
time(&now);
t = localtime(&now);
if(strstr(cmd, "DATE")) {
fprintf(stderr, "Query Type: Date\n");
fprintf(f, "Date: %d %d, %d\n", t->tm_mon + 1, t->tm_mday, t->tm_year + 1900);
continue;
}/*end if*/
if(strstr(cmd, "TIME")) {
fprintf(stderr, "Query Type: Time\n");
fprintf(f, "Time: %02d::%02d::%02d\n", t->tm_hour, t->tm_min, t->tm_sec);
continue;
}/*end if*/
if(strstr(cmd, "EXIT")) break;
fprintf(f, "commands: DATE, TIME, EXIT.\n");
}/*end while*/
shutdown(sck, SHUT_RDWR);
close(sck);
fclose(f);
return ;
}/*end response*/

int main(void)
{
socklen_t sklen = 0;int sck = 0, i = 0, listener = 0;
struct sockaddr_in client; pid_t proc = 0;
system("ifconfig");
listener = do_listen(SERVERPORT, 1);
if(listener < 1) { perror("listen()"); return 0; }
for(i=0;i<2;i++) {
memset(&client, 0, sizeof(client));
sklen = sizeof(client);
sck = accept(listener, (struct sockaddr *)&client, &sklen);
if(sck < 1) break;
proc = fork();
if (proc == -1) { perror("fork()"); break ; }
if(proc) continue;
response(sck, &client);
break;
}/*next*/
close(listener);
return 0;
}/*end main*/

/*客戶機*/
#include <arpa/inet.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#define szSTR 256
#define SERVERPORT 21429 /*please modify the port with your id*/
int cnn(const char * ip, const int port)
{
struct sockaddr_in h; memset(&h, 0, sizeof(h));
h.sin_family = AF_INET; h.sin_port = htons(port);
h.sin_addr.s_addr = inet_addr(ip);
int s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 1) { perror("socket(tcp)"); return 0;}
int r = connect(s, (struct sockaddr *)&h, sizeof(h));
if (r == 0) return s;
perror("connect()");
return 0;
}//end cnn

int main(void)
{
int sck = 0; FILE * f = 0; char ip[szSTR]="127.0.0.1";
fprintf(stderr, "Please input the calendar server ip:");
fgets(ip, szSTR - 1, stdin);
sck = cnn(ip, SERVERPORT);
if(sck < 1) return 0;
f = fdopen(sck, "w+");
fprintf(f, "DATE\r\n");
fgets(ip, szSTR -1 , f);
fprintf(stderr, "%s\n", ip);
fprintf(f, "TIME\r\n");
fgets(ip, szSTR -1 , f);
fprintf(stderr, "%s\n", ip);
fprintf(f, "EXIT\r\n");
fclose(f);
close(sck);
return 0;
}/*end main*/

❾ 什麼是Socket簡單點,通俗易懂的

網路上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。

閱讀全文

與計算機網路socket相關的資料

熱點內容
紅米網路診斷設置wlan 瀏覽:512
網路歌曲怎麼找鏈接 瀏覽:645
網路電話延遲到什麼地方 瀏覽:586
華碩電腦怎麼打開網路共享 瀏覽:896
電腦網路正常用cmd後還是上不了網 瀏覽:944
哪個靜態ip網路更強 瀏覽:706
還有什麼網路用語 瀏覽:826
無線網路是什麼顏色 瀏覽:727
蘋果玩mc一直出現網路錯誤 瀏覽:313
智導互聯盒無法連接網路 瀏覽:389
俠諾路由器無線網路 瀏覽:299
網路掘墓人該如何對待 瀏覽:841
登錄報考一起走為什麼網路錯誤 瀏覽:680
蘋果xsmax雙卡切換蜂窩網路 瀏覽:467
申請網路文化經營許可證費用多少 瀏覽:709
車內請檢查網路設置 瀏覽:722
蘋果手機連接無線網提示無法加入網路 瀏覽:263
英語網路語怎麼寫 瀏覽:167
路由器網路格式圖片 瀏覽:756
怎麼啟用無線網路 瀏覽:38

友情鏈接