#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
int __cdecl main(void)
{
WSADATA wsaData;
SOCKET ListenSocket = INVALID_SOCKET,
ClientSocket = INVALID_SOCKET;
struct addrinfo *result = NULL,
hints;
char recvbuf[DEFAULT_BUFLEN];
int iResult, iSendResult;
int recvbuflen = DEFAULT_BUFLEN;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d/n", iResult);
return 1;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
// Resolve the server address and port
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed with error: %d/n", iResult);
WSACleanup();
return 1;
}
// Create a SOCKET for connecting to server
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ListenSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld/n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}
// Setup the TCP listening socket
iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
printf("bind failed with error: %d/n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
freeaddrinfo(result);
iResult = listen(ListenSocket, SOMAXCONN);
if (iResult == SOCKET_ERROR) {
printf("listen failed with error: %d/n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
// Accept a client socket
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed with error: %d/n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
// No longer need server socket
closesocket(ListenSocket);
// Receive until the peer shuts down the connection
do {
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
printf("Bytes received: %d/n", iResult);
// Echo the buffer back to the sender
iSendResult = send( ClientSocket, recvbuf, iResult, 0 );
if (iSendResult == SOCKET_ERROR) {
printf("send failed with error: %d/n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
printf("Bytes sent: %d/n", iSendResult);
}
else if (iResult == 0)
printf("Connection closing.../n");
else {
printf("recv failed with error: %d/n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
} while (iResult > 0);
// shutdown the connection since we're done
iResult = shutdown(ClientSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d/n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
// cleanup
closesocket(ClientSocket);
WSACleanup();
return 0;
}
分享到:
相关推荐
学习网络程序设计-03-winsock编程详解-udp通信编程-v.ppt
这个源代码包“Winsock-TCP-UDP-Delphi源代码”显然包含了使用Delphi进行TCP和UDP通信的示例代码。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保数据包按顺序无丢失地到达目标。...
用Winsock穿透各种代理-精品源代码 用Winsock穿透各种代理-精品源代码
- **错误处理**:Winsock提供了一套完整的错误处理机制,通过检查返回值和错误代码可以诊断网络编程中的问题。 #### 八、Winsock案例分析 - **案例一:简单聊天程序**:使用Winsock开发一个简单的客户端和服务端...
在TCP/IP Winsock编程中,同步和异步方式是两种主要的编程模型,它们各自有其特点和适用场景。同步方式通常逻辑结构清晰,程序员更专注于应用层面的处理,而在像Windows NT和Windows 2000这样的抢先式多任务操作系统...
VisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:...
VisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:...
在IT领域,尤其是在软件开发中,PowerBuilder (PB) 是一款功能强大的可视化编程工具,尤其适合构建数据库应用程序。本文将详细解析"PB中winsock.PBL-demo"这一主题,涉及如何在PowerBuilder 9.0中利用winsock控件和...
总结起来,"Winsock-Client-Server-Chat.rar"项目通过Visual Basic的Winsock控件展示了网络编程的基本概念和实践技巧。从客户端到服务器的连接建立,数据的收发,到多线程处理和错误处理,都是构建此类应用程序的...
这个压缩包文件包含了与Winsock相关的编程源代码,非常适合学习和理解网络编程的基础和高级概念。 1. **Winsock基础** - **初始化**:在使用Winsock进行编程时,首先需要调用`WSAStartup`函数来初始化Winsock库。 ...
《WinSock网络编程经络》的源码,用WinSock作为开发工具,以典型应用和标准协议为示例,介绍如何进行各种网络应用程序的设计,不仅实现客户端,也实现了服务器。用尽量简洁的代码揭示这些应用程序的本质,对WinSock...
在IT领域,WinSock(Windows Socket)是微软为Windows操作系统提供的网络编程接口,它遵循了Berkeley Sockets接口标准,使得开发者能够在Windows环境下编写跨平台的网络应用程序。Win32 API则是Windows系统的核心...
《WinSock网络编程经络》是一本专注于Windows Socket(简称Winsock)编程的书籍,旨在帮助初学者和中级学者深入理解和实践网络编程技术。Winsock是Windows操作系统中实现Berkeley Sockets接口的一个库,它是进行网络...
在IT行业中,网络编程是不可或缺的一部分,而WinSock(Windows Socket)是Microsoft Windows下的网络通信接口,它提供了标准的Berkeley套接字API,使得开发者能够编写跨平台的TCP/IP应用程序。本示例是一个简单的...
本资源“商业编程-源码-用于跟踪WinSock中通讯的DLL源代码.zip”提供了对WinSock通信进行跟踪的动态链接库(DLL)的源代码,这对于开发者来说是一个宝贵的参考资料,它可以帮助我们深入了解WinSock的工作原理,优化...
**WinSock编程基础** WinSock,也称为Windows Socket API,是微软为Windows操作系统提供的网络通信接口,它使得程序员能够利用TCP/IP协议栈进行网络编程。本文将深入讲解WinSock编程的基础,包括流式套接字和数据报...
WinSock网络编程经络 随书源码 本书专门讨论Windows网络编程技术。内容包括NetBIOS和Windows重定向器方法、Winsock方法、客户端远程访问服务器方法。
### Winsock网络编程知识点 #### 一、Winsock网络编程简介 ...通过上述内容,我们不仅了解了WinSock的发展历程,还深入学习了WinSock的具体技术细节,这有助于开发者更好地掌握网络编程的基础知识和技术要点。
《WinSock网络编程经络-HTTP客户端程序,获取网页》这本书深入浅出地介绍了如何使用WinSock进行网络编程,特别是构建一个HTTP客户端程序来获取网页内容。以下是对书中的核心知识点的详细阐述: 1. **WinSock库**: ...
一套完整的DELPHI防火墙开发源代码!!!! 值得学习