【socket】Windows中VC運行的TCP

一、有連接編程TCP
》》服務器編寫流程
1-創建套接字(socket)
2-服務綁定(bind)
3-服務偵聽(listen)
4-處理新連接(accept)
5-數據收發(recv/send)
6-套接字關閉(close)
》》客戶端編寫流程
1-客戶端套接字創建(socket)
2-發起連接(connect)
3-數據發收(send/recv)
4-套接字關閉(close)
server---------------------------------

//TCP 面向連接的編程
#include<iostream>
#include<windows.h>
using namespace std;

#pragma comment(lib,"ws2_32.lib")//靜態庫


void main()
{
	////////////////////// WSAStartup  協商版本//////////////////////////
	//該程序功能是讓程序能在Windows上面運行,使之和Linux之上運行一樣
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
 
	wVersionRequested = MAKEWORD( 2, 2 );
 
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		return;
	}
 
	/* Confirm that the WinSock DLL supports 2.2.*/
	/* Note that if the DLL supports versions greater    */
	/* than 2.2 in addition to 2.2, it will still return */
	/* 2.2 in wVersion since that is the version we      */
	/* requested.                                        */
 
	if ( LOBYTE( wsaData.wVersion ) != 2 ||
			HIBYTE( wsaData.wVersion ) != 2 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		WSACleanup( );
		return; 
	}
/////////////////////////////
	SOCKET sockSer;
	sockSer=socket(AF_INET,SOCK_STREAM,0);

	SOCKADDR_IN addrSer,addrCli;
	addrSer.sin_family=AF_INET;
	addrSer.sin_port=htons(5050);
	addrSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

	bind(sockSer,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));

	listen(sockSer,5);

	SOCKET sockConn;
	int len=sizeof(SOCKADDR);
	
	cout<<"server waiting client connect..."<<endl;
	sockConn=accept(sockSer,(SOCKADDR*)&addrCli,&len);
	if(sockConn==INVALID_SOCKET)
	{
		cout<<"Server Accept client connect fail!"<<endl;
		return;
	}
	else
	{
		cout<<"Server Accept client connect success!"<<endl;
	}

	char sendbuf[256];
	char recvbuf[256];
	while(1)
	{
		cout<<"Ser:>";
		cin>>sendbuf;
		if(strcmp(sendbuf,"quit")==0)
		{
			break;
		}
		send(sockConn,sendbuf,strlen(sendbuf)+1,0);
		recv(sockConn,recvbuf,256,0);
		cout<<"Cli:>"<<recvbuf<<endl;
	}
	closesocket(sockSer);
////////////
	WSACleanup();
	////////////之前加的WSAStartup在這塊要被clean 掉/
}

client----------------------------

#include<iostream>
#include<windows.h>
using namespace std;

#pragma comment(lib,"ws2_32.lib")//靜態庫

void main()
{
	////////////////////// WSAStartup//////////////////////////
	//該程序功能是讓程序能在Windows上面運行,使之和Linux之上運行一樣
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
 
	wVersionRequested = MAKEWORD( 2, 2 );
 
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		return;
	}
 
	/* Confirm that the WinSock DLL supports 2.2.*/
	/* Note that if the DLL supports versions greater    */
	/* than 2.2 in addition to 2.2, it will still return */
	/* 2.2 in wVersion since that is the version we      */
	/* requested.                                        */
 
	if ( LOBYTE( wsaData.wVersion ) != 2 ||
			HIBYTE( wsaData.wVersion ) != 2 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		WSACleanup( );
		return; 
	}
///////////////////////////////////////////////////////////
	SOCKET sockCli;
	sockCli=socket(AF_INET,SOCK_STREAM,0);

	SOCKADDR_IN addrSer;
	addrSer.sin_family=AF_INET;
	addrSer.sin_port=htons(5050);
	addrSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

	int res=connect(sockCli,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));

	if(res!=0)
	{
		cout<<"Client Connect server fail!"<<endl;
	}
		else
		{
			cout<<"client connect server success!"<<endl;
		}
		char sendbuf[256];
		char recvbuf[256];
		while(1)
		{
			recv(sockCli,recvbuf,256,0);
			cout<<"Ser:>"<<recvbuf<<endl;

			cout<<"Cli:>";
			cin>>sendbuf;
			if(strcmp(sendbuf,"quit")==0)
			{
				break;
			}
			send(sockCli,sendbuf,strlen(sendbuf)+1,0);
		}
		closesocket(sockCli);
///////////////////
	WSACleanup();
////////////之前加的WSAStartup在這塊要被clean 掉/
}
發佈了45 篇原創文章 · 獲贊 25 · 訪問量 3071
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章