服务器端的程序TCPSERVER,在工程设置LINK里添加ws2_32.lib库
// TcpServer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
int main(int argc, char* argv[])
{
//初始化WS2_32.DLL
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,0);
::WSAStartup(sockVersion,&wsaData);
//创建套节字
SOCKET s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s=INVALID_SOCKET)
{
printf("Failed socket()/n");
::WSACleanup();
return 0;
}
//填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(8888);
sin.sin_addr.S_un.S_addr=INADDR_ANY;
//绑定这个套节字到本地地址
if(::bind(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("Failed bind()/n");
::WSACleanup();
return 0;
}
//进入监听模式
if(::listen(s,2)==SOCKET_ERROR)
{
printf("Failed listen()/n");
::WSACleanup();
return 0;
}
//循环接受客户的连接请求
sockaddr_in remoteAddr;
int nAddrLen=sizeof(remoteAddr);
SOCKET client;
char szText[]="SERVER TCP!/n";
while(TRUE)
{
//接受一个新的连接
client=::accept(s,(SOCKADDR*)&remoteAddr,&nAddrLen);
if(client==INVALID_SOCKET)
{
printf("Failed accept()/n");
continue;
}
printf("接受到一个新的连接:%s/n",inet_ntoa(remoteAddr.sin_addr));
//向客户断发送数据
::send(client,szText,strlen(szText),0);
//关闭同客户端的连接
::closesocket(client);
}
//关闭监听套节字
::closesocket(s);
//释放WS2_32库
::WSACleanup();
return 0;
}
客户端的程序CLIENT
// CLIENT.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
//初始化WS2_32.DLL
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,0);
::WSAStartup(sockVersion,&wsaData);
//创建套节字
SOCKET s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s=INVALID_SOCKET)
{
printf("Failed socket()/n");
::WSACleanup();
return 0;
}
//填充sockaddr_in结构
sockaddr_in servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(8888);
//这里填写服务器去程序(TCPSEVER程序)所在机器的IP地址
//如果计算机没有联网,用127.0.0.1也可以
servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(::connect(s,(sockaddr*)&servAddr,sizeof(servAddr))==-1)
{
printf("Failed connect()/n");
::WSACleanup();
return 0;
}
char buff[256];
int nRecv=::recv(s,buff,256,0);
if(nRecv)
{
buff[nRecv]='/0';
printf("接受到数据:%s/n",buff);
}
::closesocket(s);
::WSACleanup();//释放ws2_32库
return 0;
}