Socket的使用实例,控制台上的编程。嗨!这里是服务端,您已连接成功!
2014-12-24 10:07
591 查看
//什么都不说了,直接上代码,本人使用Win7,VisualStudio2013C++控制台程序
#include "stdafx.h"
#include <Winsock2.h>
#include <iostream>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void main()
{
//========================================================
/*在开发的过程之中,如果你想要在应用程序中使用Socket的话,
你就必须先调用wsastartup函数。WSAStarup是windows网络编程接口软件下的一个命令,
只有学会灵活地使用WSAStarup,你才有可能编写出一个优秀的socket程序出来。*/
//========================================================
//wVersionRequested:一个WORD(双字节)型数值,在最高版本的Windows Sockets支持调用者使用,
//高阶字节指定小版本(修订本)号,低位字节指定主版本号
WORD wVersionRequested;
//WSAData 指向WSADATA数据结构的指针,这是提高程序运行速度所做的一个细小优化,
//一般都是用来接收winsock实现的细节
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1); //高位字节存储副版本号, 低位字节存储主版本号
err = WSAStartup(wVersionRequested, &wsaData);//WSAStartup,即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令
if (err != 0)
{
return;
}
//WSAStartup函数主要是初始化Winsock DLL,
//而WSACleanup()函数主要是为了解除Socket库的加载并且释放一定的资源。
//所以WSAStartup()函数和WSACleanup()函数是成对使用的。
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)//高位字节和低位字节不正确
{
WSACleanup();
return;
}
//创建套接字
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
//AF_INET:AddressFamily_INET,SOCK_DGRAM(UDP),后面那个0是protocol的值。
SOCKADDR_IN addrSrv; //服务端SOCKET
//SOCKADDR_IN和SOCKET类似,,用来专门标示TCP/IP协议下的地址结构的。
//下面三句初始化各种参数
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //填入本机IP地址
addrSrv.sin_family = AF_INET;
//addrSrv.sin_port = 0; //系统自动选择一个未占用的端口
addrSrv.sin_port = htons(2000); //端口号位2000
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //将套接字绑定到端口上
SOCKADDR_IN addrClient; //客户端SOCKET
int len = sizeof(SOCKADDR);
char recvBuffer[300]; //接收字符数据
memset((void*)recvBuffer, '\0', 300);
cout << "等待对方发送数据... " << endl;
recvfrom(sockSrv, recvBuffer, 300, 0, (SOCKADDR*)&addrClient, &len);//接收客户端数据存储到recvBuffer
cout << "对方的IP地址为: " << inet_ntoa(addrClient.sin_addr) << endl; //输出客户端的地址
cout << "接收: " << recvBuffer << endl; //输出recvBuffer内容
string sendBuffer = "这里是服务器,您已连接成功!";
cout << "发送: " << sendBuffer.c_str()<< endl;
//下面是想客户端进行无连接的数据发送
sendto(sockSrv, sendBuffer.c_str(), sendBuffer.length() + 1, 0, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
closesocket(sockSrv); //关闭服务器套接字
WSACleanup(); //结束套接字库的调用
system("pause");
}
//什么都不说了,直接上代码,本人使用Win7,VisualStudio2013C++控制台程序
#include "stdafx.h"
#include <Winsock2.h>
#include <iostream>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void main()
{
//========================================================
/*在开发的过程之中,如果你想要在应用程序中使用Socket的话,
你就必须先调用wsastartup函数。WSAStarup是windows网络编程接口软件下的一个命令,
只有学会灵活地使用WSAStarup,你才有可能编写出一个优秀的socket程序出来。*/
//========================================================
//wVersionRequested:一个WORD(双字节)型数值,在最高版本的Windows Sockets支持调用者使用,
//高阶字节指定小版本(修订本)号,低位字节指定主版本号
WORD wVersionRequested;
//WSAData 指向WSADATA数据结构的指针,这是提高程序运行速度所做的一个细小优化,
//一般都是用来接收winsock实现的细节
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1); //高位字节存储副版本号, 低位字节存储主版本号
err = WSAStartup(wVersionRequested, &wsaData);//WSAStartup,即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令
if (err != 0)
{
return;
}
//WSAStartup函数主要是初始化Winsock DLL,
//而WSACleanup()函数主要是为了解除Socket库的加载并且释放一定的资源。
//所以WSAStartup()函数和WSACleanup()函数是成对使用的。
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)//高位字节和低位字节不正确
{
WSACleanup();
return;
}
//创建套接字
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
//AF_INET:AddressFamily_INET,SOCK_DGRAM(UDP),后面那个0是protocol的值。
SOCKADDR_IN addrSrv; //服务端SOCKET
//SOCKADDR_IN和SOCKET类似,,用来专门标示TCP/IP协议下的地址结构的。
//下面三句初始化各种参数
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //填入本机IP地址
addrSrv.sin_family = AF_INET;
//addrSrv.sin_port = 0; //系统自动选择一个未占用的端口
addrSrv.sin_port = htons(2000); //端口号位2000
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //将套接字绑定到端口上
SOCKADDR_IN addrClient; //客户端SOCKET
int len = sizeof(SOCKADDR);
char recvBuffer[300]; //接收字符数据
memset((void*)recvBuffer, '\0', 300);
cout << "等待对方发送数据... " << endl;
recvfrom(sockSrv, recvBuffer, 300, 0, (SOCKADDR*)&addrClient, &len);//接收客户端数据存储到recvBuffer
cout << "对方的IP地址为: " << inet_ntoa(addrClient.sin_addr) << endl; //输出客户端的地址
cout << "接收: " << recvBuffer << endl; //输出recvBuffer内容
string sendBuffer = "这里是服务器,您已连接成功!";
cout << "发送: " << sendBuffer.c_str()<< endl;
//下面是想客户端进行无连接的数据发送
sendto(sockSrv, sendBuffer.c_str(), sendBuffer.length() + 1, 0, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
closesocket(sockSrv); //关闭服务器套接字
WSACleanup(); //结束套接字库的调用
system("pause");
}
相关文章推荐
- Android使用Socket编程连接服务端
- 在socket编程中,如何获取连接另一端(客户端)的ip地址,使用accept或者getpeername
- [Socket网络编程]由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
- Windows下使用socket,连接之前用非阻塞方式,连接成功后用阻塞方式
- Java Socket编程实例(二)- UDP基本使用
- jedisPool中的jedis实例被还回后是否会断开和redis服务端的socket连接
- Linux socket编程之使用epoll处理海量连接(程序例程)
- socket编程---之单连接服务端实现
- UDP:socket服务端和接收端的基本使用实例
- python网络编程之TCP通信实例和socketserver框架使用例子
- socket编程---之多连接服务端实现(多线程方式)
- Socket编程---使用无连接的数据报(UDP) 进行通信(转)
- loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
- 总结使用Get、Post、Socket三种方式连接服务端与传输数据的步骤
- .Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接
- 网络编程C#篇(二):Socket无连接简单实例 推荐
- socket编程(二)---- 使用套接字连接多个客户端
- python网络编程之TCP通信实例和socketserver框架使用例子
- Java Socket编程实例(一)- TCP基本使用
- .Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接