Winsocket通信测试

一、Winsocket用TCP协议来完成通信

①服务器的程序

// SocketSever.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib,"WS2_32.LIB")

#if DUBUG
	#define AF_INET         2               /* internetwork: UDP, TCP, etc. */
	#define SOCK_STREAM     1               /* stream socket */
	#define SOCK_DGRAM      2               /* datagram socket */
	#define SOCK_RAW        3               /* raw-protocol interface */
	#define SOCK_RDM        4               /* reliably-delivered message */
	#define SOCK_SEQPACKET  5               /* sequenced packet stream */
	/*
	* Socket address, internet style.
	*/
	struct sockaddr_in {
			short   sin_family;
			u_short sin_port;
			struct  in_addr sin_addr;
			char    sin_zero[8];
	};
	typedef struct sockaddr_in SOCKADDR_IN; /* Microsoft Windows Extended data types */
	int bind(
		SOCKET s,
		const struct sockaddr FAR * name,
		int namelen
		);									/* INCL_WINSOCK_API_PROTOTYPES*/
	int listen(
		SOCKET s,
		int backlog
		);
#endif 

#define Port 3578
#define MaxSize 1024

SOCKADDR_IN addrSrv;
SOCKADDR_IN addrClient;
SOCKET sockSrv; //服务器

SOCKET sockConn;

//********************************************************************************************************/
//** 函数名 ** StartSock()
//**  输入  ** 无
//**  输出  ** 无
//**函数描述** 加载套接字
//********************************************************************************************************/
int SocketInit()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested=MAKEWORD(2,2);
	err = WSAStartup(wVersionRequested,&wsaData); //返回0,成功,否则就是错误码

	if (err!=0)
	{
		printf("WinSock DLL版本不足要求n");
		return 0;
	}

	if (LOBYTE(wsaData.wVersion)!=2||
		HIBYTE(wsaData.wVersion)!=2)
	{
		WSACleanup();
		return 0;
	}

	return 1;
}

//********************************************************************************************************/
//** 函数名 ** main()
//**  输入  ** 无
//**  输出  ** 无
//**函数描述** 主函数
//********************************************************************************************************/
int main()
{
 	if (SOCKET_ERROR ==SocketInit())
 	{
 		return -1;
 	}

	SOCKADDR_IN addrSrv;//存放本地地址信息的
	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//htol将主机字节序long型转换为网络字节序
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(6001);//htos用来将端口转换成字符,1024以上的数字即可

	//真正socket编程部分
	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//面向连接的可靠性服务SOCK_STRAM
	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将socket绑定到相应地址和端口上
	listen(sockSrv,5);//等待队列中的最大长度为5
	printf("%s\n","Welcome,the Host is running!Now Wating for someone comes in!");

	SOCKADDR_IN addrClient;
	int iSend = 0;
	char sendBuf[MaxSize];
	char revBuf[MaxSize];

	int len=sizeof(SOCKADDR);

	while(1)			//循环监听客户端,永远不停止
	{
		sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//阻塞调用进程直至新的连接出现

		if(sockConn == INVALID_SOCKET)
		{
			printf("Accept Failed!\n");
			return -1;
		}

		sprintf(sendBuf,"Server IP is:%s",inet_ntoa(addrClient.sin_addr));//inet_nota函数是将字符转换成ip地址

		iSend = send(sockConn,sendBuf,strlen(sendBuf)+1,0);//服务器向客户端发送数据

		if(iSend == SOCKET_ERROR)
		{
			printf("send Failed!");
			break;
		}

		char recvBuf[100];
		recv(sockConn,recvBuf,100,0);//服务器从客户端接受数据
		printf("%s\n",recvBuf);
		closesocket(sockConn);//关闭socket
	}

	closesocket(sockConn);         //关闭套接字
	getchar();
	return 0;
}

②客户端的程序

<pre name="code" class="cpp">#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#include <string.h>

#pragma comment(lib,"WS2_32.LIB")

//********************************************************************************************************/
//** 函数名 ** StartSock()
//**  输入  ** 无
//**  输出  ** 无
//**函数描述** 加载套接字
//********************************************************************************************************/
int SocketInit()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested=MAKEWORD(2,2);
	err = WSAStartup(wVersionRequested,&wsaData); //返回0,成功,否则就是错误码

	if (err!=0)
	{
		printf("WinSock DLL版本不足要求n");
		return 0;
	}

	if (LOBYTE(wsaData.wVersion)!=2||
		HIBYTE(wsaData.wVersion)!=2)
	{
		WSACleanup();
		return 0;
	}

	return 1;
}

//********************************************************************************************************/
//** 函数名 ** main()
//**  输入  ** 无
//**  输出  ** 无
//**函数描述** 主函数
//********************************************************************************************************/
int main()
{
    //固定格式
    char recvBuf[1024];

	if (SOCKET_ERROR ==SocketInit())
 	{
 		return -1;
 	}
    //建立通讯socket
    SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.100");//设定需要连接的服务器的ip地址
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6001);//设定需要连接的服务器的端口地址
    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//与服务器进行连接

    //接受来自老师的信息

	int iRevLen = 0;
    iRevLen = recv(sockClient,recvBuf,strlen(recvBuf)+1,0);
	if(0 == iRevLen)
	{
		return -1;
	}
	else if(SOCKET_ERROR == iRevLen)
	{
		printf("Recv Failed\n!");
		return -1;
	}
    printf("%s\n",recvBuf);

	char str[100];
	gets(str);
    send(sockClient,str,strlen(str)+1,0);

	closesocket(sockClient);
    WSACleanup();
	getchar();
	return -1;
}
				
时间: 2024-08-26 08:35:30

Winsocket通信测试的相关文章

WCF服务通信测试

知识需要反复咀嚼,常读常新,简单的WCF通信测试:basicHttpBinding(基本通信)\netTcpBinding(双工通信)\netMsmqBinding(消息队列),简单的测试Demo.简单说一下代码结构,后续整理一下具体的实现逻辑,为什么这么处理.1.WCFTest.DataContracts类库代码(基础数据契约类库)<1>.OrderItem.cs using System; using System.Collections.Generic; using System.Lin

winsocket之TCP/UDP编程

一.概述: 本次练习的是TCP/UDP套接字编程,使用的是winsocket,对主要的库函数进行简绍,并实现了一个程序:实现服务器与客户端之间的通信,在服务器端实现记录用户名和密码,客服端可以实现用户名和密码的输入和查找,并且检查是否匹配.(参考  <<Visual C++网络编程>>) PS: 127.0.0.1是回路地址,用于在同一台机器上测试代码.端口号要大于1024. 二.基于TCP/UDP协议的套接字编程详解: 基于 TCP 的套接字编程的所有客户端和服务器端都是从调用s

WinSocket脚本编写实例与详解

我们知道Winsocket脚本与Web(HTML)脚本不一样,WEB(HTML)脚本主要采用HTML协议进行模拟,根据开发人员提供的接口编写脚本,而Winsocket协议主要根据服务器与客户端采用的内部通讯协议(内部通讯协议,我们在这里讲的是自定义的通讯协议)编写脚本,所以我们需要用到的工具有网络抓包工具Wireshark以及了解内部通讯协议的内容与作用,我们还可以通过服务器与客户端通讯的日志查看(linux下我们可以通过tail -f /var/log/tomcat...查看日志).好了,我们

基于winsocket的框体Server和Client

前面学了一点Winsock的知识,会编写简单的Server和Client,现在就想通过VS2008编写框体的Server和Client,而不是在控制台上的操作了,毕竟学编程就是要多加练习,在实践中发现不懂的地方,然后解决,然后再发现…… 当然,作为一个刚接触Winsock的新手,大部分知识都来自于网上的资料,包括接下来的代码也是借鉴... 第一步利用VS2008创建一个Windows窗体应用程序chatServer(过程略): 设计你的窗体,简单的设计了一个窗体注意,每一个组件都需要有唯一的Na

创龙基于C66x平台DSP与FPGA通信测试

本文为基于创龙TL665xF-EasyEVM开发板的DSP与FPGA通信测试.TL665xF-EasyEV开发板的简介绍如下:由核心板+底板构成.核心板DSP端采用单核TMS320C6655或双核TMS320C6657处理器,FPGA端采用Xilinx Artix-7处理器,实现异构多核处理器架构,DSP与FPGA内部通过uPP.EMIF16.SRIO连接:底板接口资源丰富,支持uPP.EMIF16.SRIO.千兆以太网口等多种高速接口,引出PCIe接口,单端口双通道,每通道最高通信速率5GBa

C语言下hello/hi 网络聊天程序编程及WinSocket分析

一.hello/hi网络程序编程 1.服务端 1 sever.c 2 #include<stdio.h> 3 #include<Winsock2.h> 4 #include<time.h> 5 #include<string.h> 6 #pragma warning(disable:4996) 7 #pragma comment(lib,"ws2_32.lib") 8 9 #define USER_ERROR -1 10 11 int m

[00014]-[2015-09-04]-[00]-[WinSocket编程0 基础入门]

[网络程序开发]---> 基于局域网或互联网,利用网络开发技术,开发能够运行在网络上的软件(系统) [网络程序结构]---> C/S B/S [C/S] Client/Server 即客户端与服务端结构,Client将用户的需求提交给Server,再将Server返回的结果以一定的形式提供给用户,  Server的任务就是接受Client提出的服务请求,进行相应的处理,并将结果返回给Client. 在C/S结构下,服务器程序通常在  一个固定的地址(IP&Port)监听客户的请求,服务

LR11 socket通信测试简单分享

前一段时间做一个转发工具压力测试,只是提供IP和端口,下面贴出来与大家分享,不足之处还请指正: 整个脚本写法很简单,大体来说,分三个步骤: 步骤1:建立到服务器端连接 rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=127.0.0.1:8808", LrsLastArg); 注:rc=0则表示建立通讯成功 步骤2:发送报文和接收报文 lrs

Unity客户端通信测试问题处理(二)

在客户端的通信测试过程中,场景加载的问题给自己带来了不小的麻烦.因为消息的解析方法在单独的监听线程中调用,这也就意味着无法在消息的解析方法中调用Unity自身的API了.本来是打算在接收到场景切换的消息后,直接在解析方法中调用协同程序StartCoroutine,来实现场景的异步加载,可是现在一旦调用就会提示以下错误: StartCoroutine_Auto can only be called from the main thread... 不能直接在监听线程中调用,那就只能另想办法了.如何来