//TCP1C.cpp CopyRight 小扣 XPsp3 VS2008 //
//創建一個基本的阻塞模式TCP連接的客戶端, //
//與服務器建立連接後便開始發送並顯示發送量, //
//當收到“exit"命令時發送該命令同時程序退出。 //
*************TCP1C.h*********************************
view plaincopy to clipboardprint?
#ifndef TCP1C_H
#define TCP1C_H
#include <iostream>
#include <WINSOCK2.H>
#pragma comment (lib,"ws2_32.lib")
#endif
#ifndef TCP1C_H
#define TCP1C_H
#include <iostream>
#include <WINSOCK2.H>
#pragma comment (lib,"ws2_32.lib")
#endif
//============================================
#include "TCP1C.h"
int main(){
WSADATA wsaData; //用於填充套接字庫版本的有關信息
SOCKET ServerSocket = NULL; //服務器套接字(用於同服務器IPv4地址綁定)
SOCKADDR_IN ServerSocketAddr; //服務器的IPv4地址
int port = 9999; //要連接服務器的9999端口
char buf[1024]; //存儲消息用
int MessageLen = 0; //返回的消息長度
//加載Winsock 2.2版本
if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
{
std::cout<<"WSAStartup failed"<<std::endl;
return 1;
}
//創建套接字
if((ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)
std::cout<<"Create ServerSocket failed with error"<<" "<<WSAGetLastError()<<std::endl;
//填寫服務器IPv4信息
ServerSocketAddr.sin_family = AF_INET;
ServerSocketAddr.sin_port = htons(port);
ServerSocketAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//連接服務器
if(connect(ServerSocket,(SOCKADDR*)&ServerSocketAddr,sizeof(ServerSocketAddr)) ==SOCKET_ERROR)
std::cout<<"Connecting failed with error"<<" "<<WSAGetLastError()<<std::endl;
else
std::cout<<"Connect successing!"<<std::endl;
//發送數據,直到數據內容爲"exit"則退出程序
while(strcmp(buf,"exit") != 0)
{
std::cout<<"Please input:"<<std::endl;
std::cin>>buf;
if((MessageLen = send(ServerSocket,buf,strlen(buf),0)) == INVALID_SOCKET)
std::cout<<"Send data failed with error"<<" "<<WSAGetLastError()<<std::endl;
else
std::cout<<"Send"<<" "<<MessageLen<<" "<<"byte"<<"datas"<<std::endl;;
}
closesocket(ServerSocket);
WSACleanup();
return 0;
}
***************TCP1S.h*******************************
view plaincopy to clipboardprint?
#ifndef BASICS_H
#define BASICS_H
#include <WINSOCK2.H>
#include <iostream>
#pragma comment (lib,"WS2_32.LIB")
#endif
*************TCP1S.cpp*******************************
view plaincopy to clipboardprint?
//TCP1S.cpp CopyRight 小扣 XPsp3 VS2008 //
//創建一個基本的阻塞模式TCP連接的服務端, //
//與客戶端建立連接後便開始接收數據並顯示, //
//當收到“exit"消息時程序退出。 //
//============================================
#include "TCP1S.h"
int main(){
WSADATA wsaData; //在加載Winsock DLL版本時被用來填充該庫版本的有關信息
SOCKET ListeningSocket; //用於監聽的套接字
SOCKET NewConnection = NULL; //accept函數反回的套接字,用於同connect方(客戶端)連繫。
SOCKADDR_IN ServerAddr; //本地(服務器)IPv4地址
SOCKADDR_IN ClientAddr; //connect方IPv4地址
int port = 9999; //本地打要打開的端口
int ClientAddrLen = sizeof(ClientAddr); //connect方IPv4地址的長度
int BufLen = 0; //接收到的信息的長度
char buf[50]; //用於存儲信息
/*加載2.2版本的Winsock*/
if(WSAStartup(MAKEWORD(2,2),&wsaData))
{
std::cout<<"WSAStartup failed"<<std::endl;
return 1;
}
std::cout<<"WSAStartup successing!"<<std::endl;
/*創建套接字*/
if((ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)
{
std::cout<<"Create ListenSocket failed with error"<<" "<<WSAGetLastError()<<std::endl;
return 1;
}
std::cout<<"Create ListenSocket successing!"<<std::endl;
/*設置服務器IPv4地址*/
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(port);
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
/*綁定套接字與地址信息*/
if(bind(ListeningSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr)) == SOCKET_ERROR)
{
std::cout<<"Bind failed with error"<<" "<<WSAGetLastError()<<std::endl;
return 1;
}
std::cout<<"Bind successing!"<<std::endl;
/*開始監聽*/
if(listen(ListeningSocket,3) == SOCKET_ERROR)
{
std::cout<<"Listen failed with error"<<" "<<WSAGetLastError()<<std::endl;
return 1;
}
else
std::cout<<"Listening..."<<std::endl;
/*接受連接*/
if((NewConnection = accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&ClientAddrLen)) == INVALID_SOCKET)
std::cout<<"Accept failed with error"<<" "<<WSAGetLastError()<<std::endl;
else
std::cout<<"Accept successing!"<<std::endl;
/*接收並顯示數據*/
while(strcmp(buf,"exit"))
{
BufLen = recv(NewConnection,buf,sizeof(buf),0);
buf[BufLen] = '/0';
std::cout<<buf<<std::endl;
}
/*關閉套接字*/
closesocket(ListeningSocket);
closesocket(NewConnection);
WSACleanup();
return 0;
}