編寫socket套接字的步驟

黨偉_90發表於2018-04-25

伺服器端程式的編寫步驟:

第一步:呼叫socket()函式建立一個用於通訊的套接字。

第二步:給已經建立的套接字繫結一個埠號,這一般通過設定網路套介面地址和呼叫bind()函式來實現。

第三步:呼叫listen()函式使套接字成為一個監聽套接字。

第四步:呼叫accept()函式來接受客戶端的連線,這是就可以和客戶端通訊了。

第五步:處理客戶端的連線請求。

第六步:終止連線。


客戶端程式編寫步驟:、

第一步:呼叫socket()函式建立一個用於通訊的套接字。

第二步:通過設定套接字地址結構,說明客戶端與之通訊的伺服器的IP地址和埠號。

第三步:呼叫connect()函式來建立與伺服器的連線。

第四步:呼叫讀寫函式傳送或者接收資料。

第五步:終止連線。

 

分別建兩個工程。。把cpp拷貝進去執行就可以了。。。

server端:

 

#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
 //建立套接字
 WORD myVersionRequest;
 WSADATA wsaData;
 myVersionRequest=MAKEWORD(1,1);
 int err;
 err=WSAStartup(myVersionRequest,&wsaData);
 if (!err)
 {
  printf("已開啟套接字\n");

 } 
 else
 {
  //進一步繫結套接字
  printf("巢狀字未開啟!");
  return;
 }
 SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);//建立了可識別套接字
 //需要繫結的引數
 SOCKADDR_IN addr;
 addr.sin_family=AF_INET;
 addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
 addr.sin_port=htons(6000);//繫結埠
 
 bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//繫結完成
 listen(serSocket,5);//其中第二個引數代表能夠接收的最多的連線數
 
 //////////////////////////////////////////////////////////////////////////
 //開始進行監聽
 //////////////////////////////////////////////////////////////////////////
 SOCKADDR_IN clientsocket;
 int len=sizeof(SOCKADDR);
 while (1)
 {
  SOCKET serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果這裡不是accept而是conection的話。。就會不斷的監聽
  char sendBuf[100];
  
  sprintf(sendBuf,"welcome %s to bejing",inet_ntoa(clientsocket.sin_addr));//找對對應的IP並且將這行字列印到那裡
  send(serConn,sendBuf,strlen(sendBuf)+1,0);
  char receiveBuf[100];//接收
  recv(serConn,receiveBuf,strlen(receiveBuf)+1,0);
  printf("%s\n",receiveBuf);
  closesocket(serConn);//關閉
 WSACleanup();//釋放資源的操作
 }
}

 

 

 

client端:

 


#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")

void main()
{
 int err;
 WORD versionRequired;
 WSADATA wsaData;
 versionRequired=MAKEWORD(1,1);
 err=WSAStartup(versionRequired,&wsaData);//協議庫的版本資訊

 if (!err)
 {
  printf("客戶端巢狀字已經開啟!\n");
 }
 else
 {
  printf("客戶端的巢狀字開啟失敗!\n");
  return;//結束
 }
 SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);
 SOCKADDR_IN clientsock_in;
 clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
 clientsock_in.sin_family=AF_INET;
 clientsock_in.sin_port=htons(6000);
 //bind(clientSocket,(SOCKADDR*)&clientsock_in,strlen(SOCKADDR));//注意第三個引數
 //listen(clientSocket,5);
 connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//開始連線

 char receiveBuf[100];
 recv(clientSocket,receiveBuf,101,0);
 printf("%s\n",receiveBuf);

 send(clientSocket,"hello,this is client",strlen("hello,this is client")+1,0);
 closesocket(clientSocket);
 WSACleanup();
}

相關文章