//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;
}