用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

c-windows_socket-client

2014-04-27 作者: 我的程序员之路举报

[c]代码库

/******************************************************************************
 * 程序: winsock_client.c
 * 目的: 创建一个套接字,通过网络连接一个服务器,并打印来自服务器的信息
 * 作者: 周 晨
 * 学号: 2011210154
 *****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <WinSock2.h>
#include <Windows.h>

/* 导入win32函数库 */
#pragma comment(lib, "WS2_32.lib")

/* winsock初始化成功标志 */
#define WSA_STARTUP_SUCCESS 0
/* 接受服务器数据的缓冲区数组长度 */
#define BUFFER_SIZE 35

/* 获取系统当前的日期和时间 */
void GetSystemCurrentTime()
{
	SYSTEMTIME sys;
	GetLocalTime( &sys );
	printf("%4d-%02d-%02d %02d:%02d:%02d - ",
			sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond);
}

int main()
{
	/* 接收函数调用返回的状态码 */
	int state_code = 0;
	/* 服务器IP地址 */
	char FAR server_ip[] = "127.0.0.1";
	/* 服务器端口号 */
	int server_port = 5199;
	/* 声明一个客户端Socket连接 */
	SOCKET client_socket;
	/* 声明服务器端的网络地址结构 */
	SOCKADDR_IN server_address;
	/* 清空该网络地址结构 */
	memset( &server_address, 0, sizeof(server_address) );
	/* 设置为Internet协议簇 */
	server_address.sin_family = AF_INET;
	/* 转化服务器IP地址 */
	server_address.sin_addr.S_un.S_addr = inet_addr(server_ip);
	/* 转化服务器端口号 */
	server_address.sin_port = htons(server_port);
	/* 网络地址结构所占字节大小 */
	int server_address_size = (int)sizeof(SOCKADDR_IN);
	/* 从服务器端读取到的字符数 */
	int character_count = 0;
	/* 接受服务器数据的缓冲区 */
	char buffer[BUFFER_SIZE];

	GetSystemCurrentTime();
	printf("Client:客户端已启动!\n");

	/* 初始化 WinSock 连接 */
	WSADATA wsadata;
	state_code = WSAStartup(MAKEWORD(2, 2), &wsadata);
	if (WSA_STARTUP_SUCCESS != state_code)
	{
		GetSystemCurrentTime();
		printf("发生错误:初始化WinSock连接失败!错误码:%d\n", WSAGetLastError());
		exit(EXIT_FAILURE);
	}

	/* 创建 Socket 连接 */
	client_socket = socket(AF_INET, SOCK_STREAM, 0);
	GetSystemCurrentTime();
	if (INVALID_SOCKET == client_socket)
	{
		printf("发生错误:客户端套接字创建失败!错误码:%d\n", WSAGetLastError());
		closesocket(client_socket);
		WSACleanup();
		exit(EXIT_FAILURE);
	}
	printf("Client:客户端套接字已成功创建!\n");

	/* 尝试连接到服务器端 */
	GetSystemCurrentTime();
	printf("Client:正在尝试连接服务器......\n");
	state_code = connect(client_socket, (SOCKADDR*)&server_address, server_address_size);
	GetSystemCurrentTime();
	if (SOCKET_ERROR == state_code)
	{
		printf("发生错误:连接服务器失败!错误码:%d\n", WSAGetLastError());
		closesocket(client_socket);
		WSACleanup();
		exit(EXIT_FAILURE);
	}
	printf("Client:连接服务器成功!\n");

	/* 从服务器端读取数据并将其输出到屏幕上 */
	character_count = recv(client_socket, buffer, strlen(buffer), 0);
	while (character_count > 0)
	{
		GetSystemCurrentTime();
		printf("Client:收到来自服务器Server端的消息,内容如下:\n\n");
		GetSystemCurrentTime();
		printf("%s\n\n", buffer);
		character_count = recv(client_socket, buffer, strlen(buffer), 0);
	}
	/* 关闭本次socket连接并清除winsock */
	closesocket(client_socket);
	WSACleanup();
	system("pause");
	exit(EXIT_SUCCESS);

	return EXIT_SUCCESS;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...