您的位置:首页 > 理论基础 > 计算机网络

windows网络编程

2015-12-05 20:47 274 查看
客户端:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<winsock2.h>
#include<cstdio>
using namespace std;
#pragma comment(lib, "ws2_32.lib")

#define PORT 4567
#define ADDR "192.168.137.1"

int main()
{
WSADATA wsock;
SOCKET sconnection;
SOCKADDR_IN serAddr;
int nRet = 0;
char buf[100];
cout << "客户端"<<endl;
//初始化套接字
cout << "初始化套接字..." << endl;
if (WSAStartup(MAKEWORD(2, 2), &wsock) != 0)
{
cout << "初始化失败" << endl;
return 0;
}
cout << "初始化成功" << endl;
//下面创建连接套接字
cout << "创建TCP连接套接字..." << endl;
if ((sconnection = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
cout << "连接套接字创建失败" << endl;
WSACleanup();
return 0;
}
cout << "TCP连接套接字创建成功" << endl;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(PORT);
serAddr.sin_addr.S_un.S_addr = inet_addr(ADDR);
//下面链接服务器
cout << "连接服务器..." << inet_ntoa(serAddr.sin_addr) << "-" << htons(serAddr.sin_port) << endl;
if (connect(sconnection, (SOCKADDR*)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
cout << "连接失败" << endl;
closesocket(sconnection);
WSACleanup();
return 0;
}
cout << "连接成功!" << endl;
cout << "尝试发送数据" << endl;
for (int i = 0;;i++)
{
memset(buf, 0, sizeof(buf));
cout << "输入信息:" << endl;
cin >> buf;
cout << "发送中.." << endl;
if ((nRet = send(sconnection, buf, strlen(buf), 0)) == SOCKET_ERROR)
{
cout << "发送失败" << endl;
closesocket(sconnection);
WSACleanup();
return 0;
}
cout << "发送成功" << endl;
if (strcmp(buf, "exit") == 0)
{
cout << "正常退出" << endl;
break;
}
memset(buf, 0, sizeof(buf));
cout << "等待回应..." << endl;
if ((nRet = recv(sconnection, buf, sizeof(buf), 0)) == SOCKET_ERROR)
{
cout << "接收错误" << endl;
}
cout << "回应:";
cout << buf << endl;
}
closesocket(sconnection);
WSACleanup();
return 0;
}


服务器:

#include<stdio.h>
#include<winsock2.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;

#pragma comment(lib,"ws2_32.lib")

#define PORT 4567
#define ADDR "192.168.137.1"

int main()
{
WSADATA wsock;
SOCKET listensocket;
SOCKET newconnection;
SOCKADDR_IN serAddr;
SOCKADDR_IN cliAddr;
int cliAddrLen = sizeof(cliAddr);
int nRet = 0;
char buf[100];
cout << "服务端";
cout << ADDR << "-" << PORT << endl;
//下面初始化WinSock
cout << "初始化套接字..." << endl;
if (WSAStartup(MAKEWORD(2, 2), &wsock) != 0)
{
cout << "初始化失败" << endl;
return 0;
}
cout << "初始化成功" << endl;
//下面创建监听
cout << "创建TCP监听套接字..." << endl;
if ((listensocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
cout << "监听创建失败" << endl;
WSACleanup();
return 0;
}
cout << "TCP监听套接字创建成功" << endl;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(PORT);
serAddr.sin_addr.S_un.S_addr = inet_addr(ADDR);
//绑定监听套接字
cout << "绑定监听套接字..." << endl;
if (bind(listensocket, (SOCKADDR*)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
cout << "监听套接字绑定失败" << endl;
closesocket(listensocket);
WSACleanup();
return 0;
}
cout << "监听套接字绑定成功" << endl;
//创立监听
cout << "创建监听..." << endl;
if (listen(listensocket, 5) == SOCKET_ERROR)
{
cout << "监听创建失败" << endl;
closesocket(listensocket);
WSACleanup();
return 0;
}
cout << "监听创建成功" << endl;
//等待连接
cout << "等待连接..." << endl;
if ((newconnection = accept(listensocket, (SOCKADDR*)&cliAddr, &cliAddrLen)) == SOCKET_ERROR)
{
cout << "连接错误" << endl;
closesocket(listensocket);
WSACleanup();
return 0;
}
cout << "连接成功!" << endl;
cout << "连接信息:" << inet_ntoa(cliAddr.sin_addr)<<"-"<<ntohs(cliAddr.sin_port) << endl;
//这个程序只监听一个所以只监听第一个接收到连接的
closesocket(listensocket);
cout << "等待数据..." << endl;
for (int i = 0;;i++)
{
memset(buf, 0, sizeof(buf));
if ((nRet = recv(newconnection, buf, sizeof(buf), 0)) == SOCKET_ERROR)
{
cout << "数据接收错误" << endl;
closesocket(newconnection);
WSACleanup();
return 0;
}
cout << buf << endl;
//若发现exit退出
if (strcmp(buf, "exit") == 0)
{
cout << "正常退出" << endl;
break;
}
if ((nRet = send(newconnection, buf, strlen(buf), 0)) == SOCKET_ERROR)
{
cout << "发送失败" << endl;
}
}
closesocket(newconnection);
WSACleanup();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: