⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_client.c

📁 socket编程中的客户端代码client
💻 C
字号:
// U_client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define DATA_BUFFER 1024 //默认缓冲区大小
int main(int argc, char * argv[])
{
	WSADATA wsaData;
	SOCKET sClient;
	int iPort = 5050;
	int iLen;
	int iRecv;//从服务器端接收的数据长度
	char msg[]="Hello, my name is Tom.";
	char buf[100];
	struct sockaddr_in ser,cli;//服务器端地址
	//判断参数输入是否正确:client [Server IP]
	if(argc<2)
	{
		//提示在命令行中输入服务器IP地址
		printf("Usage: client [server IP address]\n");
		return -1;
	}
//

	if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
	{
		printf("Failed to load Winsock.\n");
		return -1;
	}
	//填写要连接的服务器地址信息
	ser.sin_family = AF_INET;
	cli.sin_family = AF_INET;
	ser.sin_port = htons(iPort);
	//inet_addr()将命令行中输入的点分IP地址转换为二进制表示的网络字节序IP地址
	ser.sin_addr.s_addr = inet_addr(argv[1]);
	cli.sin_addr.s_addr = htonl(INADDR_ANY); 
	//建立客户端流式套接口
	sClient = socket(AF_INET,SOCK_DGRAM,0);
	if(sClient == INVALID_SOCKET)
	{
		printf("socket() Failed: %d\n",WSAGetLastError());
		return -1;
	}

	if(bind(sClient,(LPSOCKADDR)&cli,sizeof(cli)) == SOCKET_ERROR)
	{
		printf("bind() Failed: %d\n",WSAGetLastError());
		return -1;
	}

	iRecv = sendto(sClient,msg,sizeof(msg),0,(LPSOCKADDR)&ser,sizeof(ser));
	if(iRecv == SOCKET_ERROR)
	{
		printf("sendto() Failed: %d\n",WSAGetLastError());
	}
	else
	{
		printf("sendto() byte: %d\n",iRecv);
	}

	iLen=sizeof(ser);
	iRecv =recvfrom(sClient,buf,sizeof(buf),0,(LPSOCKADDR)&ser,&iLen);
	if(iRecv == 0) 
		return -1;
	else if(iRecv == SOCKET_ERROR)
	{
		printf("recvfrom() Failed: %d\n",WSAGetLastError());
		return -1;
	}
	else
		printf("recvfrom() data from server: %s\n",buf);

	shutdown(sClient,SD_BOTH);
	closesocket(sClient);

	WSACleanup();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -