先建立兩個工程Server和Client,添加StdAfx.h和WINSOCK2.h兩個頭文件,然後編寫下面的兩段代碼:
Server.cpp:
#include "StdAfx.h"
#include "WINSOCK2.h"
#include <iostream>
#define _TCHAR char
#pragma comment(lib, "ws2_32.lib ")
using namespace std;
int main(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET ListeningSocket;
SOCKADDR_IN ServerAddr;
SOCKET NewConnection;
SOCKADDR_IN ClientAddr;
int Port = 5150;
WSAStartup(MAKEWORD(2,2), &wsaData);// 初始化Windows Socket 2.2
ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//創建一個新的Socket來響應 客戶端的連接請求;AF_INET字段是表示網絡地址的類型,AF_INET表示是internet域中進行通信;SOCK_STREAM表示socket的類型,SOCK_STREAM表示是流套接字IPPROTO_TCP表明協議類型,IPPROTO_TCP或者0表示TCP/IP協議
ServerAddr.sin_family = AF_INET; // 填寫服務器地址信
ServerAddr.sin_port = htons(Port); // 端口爲5150
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY表示機器上的所用網絡地址 ; 比如你的機器上有兩張網卡,那麼到達這兩張網卡的數據,你的socket都可以得到通知;htonl將IP地址轉換爲網絡格式
bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr)); //綁定監聽端口;當調用socket函數創建套接字後,該套接字並沒有與本機地址和端口等信息相連,bind函數將完成這些工作
listen(ListeningSocket, 2); // 開始監聽,指定最大同時連接數爲2
int len = sizeof(ClientAddr);
NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr, &len);// 接受新的連接
cout << "************************************************" << endl;
cout << "****new client has been connected******" << endl;
cout << "*************************************************" << endl;
/* 當連接建立之後,我們就可以在這裏和client進行通信,傳輸數據了*/
closesocket(NewConnection); //關閉連接
closesocket(ListeningSocket); //並關閉監聽Socket
WSACleanup(); // 釋放Windows Socket DLL的相關資源
getchar();
return 0;
}
Client.cpp:
#include "StdAfx.h"
#include "WINSOCK2.h"
#include <iostream>
#define _TCHAR char
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET s;
SOCKADDR_IN ServerAddr;
int Port = 5150;
WSAStartup(MAKEWORD(2,2), &wsaData); //初始化Windows Socket 2.2
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 創建一個新的Socket來連接服務器
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //在程序中我與本機進行通信
int result = connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr)); // 向服務器發出連接請求
if(result == 0){ //result==0表示連接成功
cout << "Client has connected to server!";
}
closesocket(s);
WSACleanup();
getchar();
return 0;
}
附:StdAfx.h的代碼
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__394205FE_C7DC_42D4_B4B5_93EC44EB784C__INCLUDED_)
#define AFX_STDAFX_H__394205FE_C7DC_42D4_B4B5_93EC44EB784C__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <stdio.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__394205FE_C7DC_42D4_B4B5_93EC44EB784C__INCLUDED_)