18,356
社区成员
发帖
与我相关
我的任务
分享
// 创建套节字
SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}
// 填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(6000);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 绑定这个套节字到一个本地地址
if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("Failed bind() \n");
return 0;
}
// 进入监听模式
if(::listen(sListen, 2) == SOCKET_ERROR)
{
printf("Failed listen() \n");
return 0;
}
// 接受客户的连接请求
sockaddr_in remoteAddr;
int nAddrLen = sizeof(remoteAddr);
SOCKET sClient;
char szText[1024];
memset(szText,0,1024);
// 接受一个新连接
sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
if(sClient == INVALID_SOCKET)
{
printf("Failed accept()");
}
printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
}
m_socket=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==m_socket)
{
MessageBox("创建套接字失败!");
return ;
}
SOCKADDR_IN m_serv;
m_serv.sin_addr.S_un.S_addr=htonl(dwip);
m_serv.sin_family=AF_INET;
m_serv.sin_port=htons(m_port);
if(SOCKET_ERROR==connect(m_socket,(SOCKADDR*)&m_serv,sizeof(m_serv)))
{
MessageBox("连接服务器失败,请检查当前网络是否正常或对方服务器是否开启!");
return ;
}
//C++ socket程序
//下面是一个C++调用windows API实现有通信程序,您可以据此进行修改,封装成类.
// *******************************************************************
// client.cpp : Defines the entry point for the console application.
// *******************************************************************
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#define PORT_SERVER 6656
int main(int argc, char* argv[])
{
std::cout << "Start up tcp client." << std::endl;
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 0);
if (0 != WSAStartup(sockVersion, &wsaData))
{
std::cout << "Failed to retrive socket version."
<< std::endl;
return 0;
}
SOCKET sock_client;
sock_client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sock_client)
{
std::cout << "Invalid socket." << std::endl;
WSACleanup();
return 0;
}
sockaddr_in addr_sev;
addr_sev.sin_family = AF_INET;
addr_sev.sin_port = htons(PORT_SERVER);
addr_sev.sin_addr.s_addr = inet_addr("127.0.0.1");
if (SOCKET_ERROR == connect(sock_client, (sockaddr *)&addr_sev, sizeof(addr_sev)))
{
std::cout << "Failed to connect." << std::endl;
WSACleanup();
return 0;
}
char buf[512];
int recv_size = 0;
recv_size = recv(sock_client, buf, 512, 0);
if (512 > recv_size)
{
buf[recv_size] = '\0';
std::cout << "receive data is :" << buf << std::endl;
memset(buf, 0, sizeof(buf));
}
else
{
std::cout << "receive data is overflow" << std::endl;
}
closesocket(sock_client);
WSACleanup();
system("PAUSE");
return 0;
}
// *******************************************************************
// server.cpp : Defines the entry point for the console application.
// *******************************************************************
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#define PORT_SERVER 6656
#define NUM_CLIENTS 10
int main(int argc, char* argv[])
{
std::cout << "Start up tcp server." << std::endl;
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 0);
if (0 != WSAStartup(sockVersion, &wsaData))
{
std::cout << "Failed to retrive socket version."
<< std::endl;
return 0;
}
SOCKET sock_sev;
sock_sev = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sock_sev)
{
std::cout << "Invalid socket." << std::endl;
WSACleanup();
return 0;
}
sockaddr_in addr_sev;
addr_sev.sin_family = AF_INET;
addr_sev.sin_port = htons(PORT_SERVER);
addr_sev.sin_addr.s_addr = INADDR_ANY;
if (SOCKET_ERROR == bind(sock_sev, (sockaddr *)&addr_sev, sizeof(addr_sev)))
{
std::cout << "Failed to bind." << std::endl;
WSACleanup();
return 0;
}
if (SOCKET_ERROR == listen(sock_sev, NUM_CLIENTS))
{
std::cout << "Failed to listen." << std::endl;
WSACleanup();
return 0;
}
sockaddr_in addr_client;
int nAddrLen = sizeof(addr_client);
while (true) //注意这里! 要加循环
{
char tmp[512];
sock_client = accept(sock_sev, (sockaddr *)&addr_client, &nAddrLen);
if (INVALID_SOCKET == sock_client)
{
std::cout << "Failed to accept." << std::endl;
continue;
}
sprintf(tmp, "Your IP is %s\n", inet_ntoa(addr_client.sin_addr));
send(sock_client, tmp, strlen(tmp), 0);
std::cout << "Connection from " << inet_ntoa(addr_client.sin_addr)
<< std::endl;
closesocket(sock_client);
}
return 0;
}