TCP程序
TCPServer
// TCPServer.cpp : 定义控制台应用程序的入口点。
//接收客户的发来的"MyTCP"
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUF_SIZE 64
void main()
{
WSADATA wsd;
if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)//初始化套接字动态库
{
printf("WSAStartup() failed! erron=%d\n",GetLastError());
return;
}
SOCKET sServ;
if ((sServ=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)//创建套接字
{
printf("socket() failed! errno=%d\n",WSAGetLastError());
WSACleanup();
return;
}
//绑定服务器地址
SOCKADDR_IN addrServ;
addrServ.sin_family=AF_INET;
addrServ.sin_addr.S_un.S_addr=INADDR_ANY;
addrServ.sin_port=htons(5000);
if (bind(sServ,(SOCKADDR*)&addrServ,sizeof(addrServ)) == SOCKET_ERROR)
{
printf("bind() failed!errno=%d\n",WSAGetLastError());
closesocket(sServ);//关闭套接字
WSACleanup();//释放套接字资源
return;
}
if (listen(sServ,2) == SOCKET_ERROR)//开始监听
{
printf("listen() failed! errno=%\n",WSAGetLastError());
closesocket(sServ);
WSACleanup();
return;
}
SOCKADDR_IN addrClient;
SOCKET sClient;
int len=sizeof(addrClient);
if ((sClient=accept(sServ,(SOCKADDR*)&addrClient,&len)) == INVALID_SOCKET)//接收客户端连接
{
printf("accept() failed! error=%d\n",WSAGetLastError());
closesocket(sServ);
WSACleanup();
return;
}
//接收客户端数据
char buf[BUF_SIZE];
ZeroMemory(buf,BUF_SIZE);
if (recv(sClient,buf,BUF_SIZE,0) == SOCKET_ERROR)
{
printf("recv() failed! error=%d\n",WSAGetLastError());
closesocket(sClient);
closesocket(sServ);
WSACleanup();
return;
}
printf("%s\n",buf);//输出“MyTCP”
closesocket(sClient);
closesocket(sServ);
WSACleanup();
system("pause");
return;
}
//相对完整的http://blog.csdn.net/ouyangshima/article/details/8932334
/*
TCP编程的服务器端一般步骤是
1.创建一个socket,用函数socket();
2.设置socket属性,用函数setsockopt(); //可选
3.绑定IP地址,端口等信息到socket上,用函数bind();
4.开启监听,用函数listen();
5.接收客户端上的来的连接,用函数accept();
6.收到数据用send()和recv(),或者read()和write();
7.关闭网络连接
8.关闭监听
服务器端 socket-->bind-->listen-->accept
*/
TCPClient
// TCPClient.cpp : 定义控制台应用程序的入口点。
//功能:向服务器端发送“MyTCP”
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUF_SIZE 64
void main()
{
WSADATA wsd;
if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)//初始化套接字动态库
{
printf("WSAStartup() failed! erron=%d\n",GetLastError());
return;
}
SOCKET sHost;//服务器套接字
if ((sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)//创建套接字
{
printf("socket() failed! errno=%d\n",WSAGetLastError());
WSACleanup();//释放套接字资源
return;
}
//设置服务器地址
SOCKADDR_IN servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
servAddr.sin_port=htons(5000);
if (connect(sHost,(SOCKADDR*)&servAddr,sizeof(servAddr)) == SOCKET_ERROR)//连接套接字
{
printf("connect() failed! errno=%d\n",WSAGetLastError());
closesocket(sHost