#include <iostream>
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <winsock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")//表示链接Ws2_32.lib这个库。
char sendData[100];
//1 初始化WSA
//2 建立一个SOCKET
//3 绑定SOCKET
//4 在指定的端口监听
//5 接受一个连接
//6 发送和接受数据
//7 断开连接
int main(int argc, char* argv[])
{
/*调用WSAStartup函数, 这个函数是连接应用程序与winsock.dll的第一个调用.其中, 第一个参数是WINSOCK 版本号,
第二个参数是指向WSADATA的指针.该函数返回一个INT型值, 通过检查这个值来确定初始化是否成功.*/
WORD sockVersion = MAKEWORD(2, 2);//初始化WSA
WSADATA wsaData;//建立一个WSADATA结构
if (WSAStartup(sockVersion, &wsaData) != 0)//确定初始化是否成功
{
return 0;
}
//创建侦听套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (slisten == INVALID_SOCKET)//判断套接字创建是否失败
{
printf("socket error !");
return 0;
}
// 在sockaddr_in结构中装入服务器端信息
sockaddr_in sin;
sin.sin_family = AF_INET;//AF_INET是 IPv4 网络协议的套接字类型
sin.sin_port = htons(12345);//端口
sin.sin_addr.S_un.S_addr = INADDR_ANY;//INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或"所有地址"、"任意地址".
//套接字绑定端口号
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
}
//开始监听,侦听连接请求
if (listen(slisten, 5) == SOCKET_ERROR)//(已捆绑未连接套接字,等待连接队列的最大长度)
{
printf("listen error !");
return 0;
}
sockaddr_in remoteAddr; //新的sockaddr_in结构
int nAddrlen = sizeof(remoteAddr);
char revData[255];
printf("等待连接...\n");
//当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)
SOCKET sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);//调用accept()函数来接受客户端的连接
printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));//输出客户端ip,inet_ntoa()将网络地址转换成“.”点隔的字符串格式
while (true)
{
if (sClient == INVALID_SOCKET)
{
printf("accept error !");
continue;
}
cout << "********************************" << endl << "接收到客户端数据:";
//接收数据
int ret = recv(sClient, revData, 255, 0);
if (ret > 0)
{
revData[ret] = 0x00;
printf(revData);//输出接收的数据
}
//判断客户端是否请求断开连接
if (revData[0] == 'e'&&revData[1] == 'n'&&revData[2] == 'd'&&ret==3){
cout <<endl<< "断开连接....."<<endl;//结束连接
break;
}
else
{
cout << endl;
char sendData[100];
cout << "请输入发送数据:";
string s;
cin >> s;//输入发送数据
int length_s = s.length();
for (int i = 0; i < length_s; i++)
{
sendData[i] = s[i];
}
//发送数据
send(sClient, sendData, length_s, 0);//已连接套接口;待发送数据的缓冲区;缓冲区中数据的长度;调用执行方式
}
}
closesocket(sClient);//关闭一个套接口,以后的访问均以WSAENOTSOCK错误返回
closesocket(slisten);
WSACleanup();//功能是终止Winsock 2 DLL (Ws2_32.dll) 的使用
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
计算机网络三级项目.zip (42个子文件)
TCP_receive
TCP_receive
stdafx.h 0B
TCP_receive.vcxproj 4KB
Debug
TCP_receive.tlog
link.read.1.tlog 2KB
link.command.1.tlog 1KB
CL.write.1.tlog 352B
cl.command.1.tlog 580B
CL.read.1.tlog 24KB
TCP_receive.lastbuildstate 155B
link.write.1.tlog 336B
TCP_receive.log 1KB
vc120.idb 779KB
Դ.obj 208KB
vc120.pdb 524KB
TCP_receive.vcxproj.filters 1KB
Դ.cpp 3KB
TCP_receive.v12.suo 21KB
TCP_receive.sln 979B
TCP_receive.sdf 34.5MB
Debug
TCP_receive.exe 75KB
TCP_receive.ilk 636KB
TCP_receive.pdb 1.85MB
TCP_send
TCP_send.sdf 34.69MB
TCP_send.sln 970B
Debug
TCP_send.exe 77KB
TCP_send.pdb 1.87MB
TCP_send.ilk 523KB
TCP_send
stdafx.h 0B
TCP_send.vcxproj.filters 1KB
Debug
vc120.idb 787KB
Դ.obj 212KB
TCP_send.log 1KB
TCP_send.tlog
link.read.1.tlog 2KB
link.command.1.tlog 978B
CL.write.1.tlog 304B
TCP_send.lastbuildstate 152B
cl.command.1.tlog 556B
CL.read.1.tlog 24KB
link.write.1.tlog 288B
vc120.pdb 524KB
TCP_send.vcxproj 4KB
Դ.cpp 2KB
TCP_send.v12.suo 19KB
共 42 条
- 1
资源评论
- weixin_399588332019-05-09不错,不错,不错的资源
- 狮子-2019-04-18还行吧 ........................
沉浮一湘蕉
- 粉丝: 1219
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功