3-TCPIP协议编程实验(winsocket)
通信网络实验 三tcpsocket编程

通信网络实验报告实验三socket(tcp)编程通信网络实验一、实验背景Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。
尽管应用开发人员很少需要在该层编写代码,但是理解socket API还是非常重要的。
(1)高层设施是构建于socket API之上的,它们是利用socket API提供的操作来实现。
(2)对于响应时间要求较高或运行于有限资源平台上的应用,甚至socket API是唯一可用的进程间通信设施。
二、服务器端程序int _tmain(intargc, _TCHAR* argv[]){printf("此窗口为服务器,正在监听端口:8888\n");SOCKET sockserv=socket(AF_INET, SOCK_STREAM,0);SOCKADDR_IN m_addr;m_addr.sin_family = AF_INET;m_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);m_addr.sin_port = htons(8888);bind(sockserv, (SOCKADDR*)&(m_addr), sizeof(m_addr));listen(sockserv, 2);SOCKADDR_IN addrclient;intlen = sizeof(SOCKADDR);while(1){SOCKET sockConn=accept(sockserv, (SOCKADDR*)&addrclient, &len);charrecvbuf[100];charsendbuf[100];memset(recvbuf,0,100);sprintf(sendbuf,"我是服务器,通网实验做了吗");send(sockConn,sendbuf,strlen(sendbuf)+1,0);recv(sockConn,recvbuf,100,0);printf("%s\n",recvbuf);closesocket(sockConn);}WSACleanup();return 0;}三、客户端程序printf("此窗口为客户端程序\n");SOCKET sockclient=socket(AF_INET, SOCK_STREAM,0);SOCKADDR_IN addrsrv;addrsrv.sin_family = AF_INET;addrsrv.sin_addr.S_un.S_addr= inet_addr("127.0.0.1");addrsrv.sin_port = htons(8888);connect(sockclient, (SOCKADDR*)&(addrsrv), sizeof(addrsrv));charrecvbuf[100];memset(recvbuf,0,100);charsendbuf[100];recv(sockclient,recvbuf,100,0);printf("%s\n",recvbuf);sprintf(sendbuf,"我是小强我的通网实验做了。
网络编程——windowssocket编程实现TCP通信

⽹络编程——windowssocket编程实现TCP通信2.程序服务器程序#include <stdlib.h>#include <stdio.h>#include <WinSock2.h>#pragma comment(lib,"Ws2_32.lib ")int main(){WSADATA wsaData;struct sockaddr_in servAddr;struct sockaddr_in cliAddr;if (WSAStartup(MAKEWORD(2, 2), &wsaData)){printf("Error:RequestWindowsSocketLibrary failed!\n");return0;}/* 设置IP地址 */memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_addr.s_addr = htonl(INADDR_ANY); //绑定本机IP//servAddr.sin_addr.s_addr = inet_addr("192.168.1.53");/* 设置端⼝ */servAddr.sin_family = AF_INET;servAddr.sin_port = htons(3000); //端⼝为3000/* 创建套接服务字 */SOCKET serverSocket;serverSocket = socket(AF_INET, SOCK_STREAM, 0);if (serverSocket == INVALID_SOCKET){printf("Error:CreatServerSocket failed!\n");return0;}/* 绑定服务器套接字 */if (bind(serverSocket, (sockaddr*)&servAddr, sizeof(sockaddr)) == SOCKET_ERROR){printf("ERROR:Bind failed!\n");return0;}/* 监听端⼝ */if (listen(serverSocket, 20) == SOCKET_ERROR){closesocket(serverSocket);WSACleanup();printf("ERROR:Listen failed!\n");return0;}printf("linstening:%dport...\n", ntohs(servAddr.sin_port));/* 阻塞⽅式等待accept */int len = sizeof(cliAddr);SOCKET clientSocket;clientSocket = accept(serverSocket, (sockaddr*)&cliAddr, &len);printf("Connected:%s \r\n", inet_ntoa(cliAddr.sin_addr));/* 接受消息 */char recvBuf[100] = { 0 };recv(clientSocket, recvBuf, sizeof(recvBuf), 0);/* 发送消息 */send(clientSocket, recvBuf, 100, NULL);closesocket(clientSocket);WSACleanup();system("pause");return1;}客户端代码#include "stdlib.h"#include <stdio.h>#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib") //加载 ws2_32.dllint main(){//初始化DLL//主版本号(低字节)为2,副版本号为2,返回 0x0202WORD sockVersion = MAKEWORD(2, 2);WSADATA wsaData;//WSAStartup() 函数执⾏成功后,会将与 ws2_32.dll 有关的信息写⼊ WSAData 结构体变量//(只需关注前两个成员即可)if (WSAStartup(sockVersion, &wsaData) != 0)return0;//创建套接字,socket() 函数⽤来创建套接字,确定套接字的各种属性//IPv4 地址、⾯向连接的数据传输⽅式、TCP 传输协议SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);//向服务器发起请求,将创建的套接字与IP地址 101.76.220.219、端⼝ 3000 绑定:sockaddr_in sockAddr;memset(&sockAddr, 0, sizeof(sockAddr));sockAddr.sin_family = PF_INET;//32位IP地址,s_addr 是⼀个整数(unsigned long),⽽IP地址是⼀个字符串,//所以需要 inet_addr() 函数进⾏转换sockAddr.sin_addr.s_addr = inet_addr("101.76.218.229");//16位的端⼝号,端⼝号需要⽤ htons() 函数转换,0~1023 的端⼝⼀般由系统分配给特定的服务程序, //尽量在 1024~65536 之间分配端⼝号。
网络编程基础深入了解TCPIP协议与Socket编程

网络编程基础深入了解TCPIP协议与Socket编程在当今数字化的时代,网络编程已经成为了每个程序员必备的技能之一。
而要深入了解网络编程,理解TCPIP协议与Socket编程是非常重要的。
TCPIP协议是Internet上应用最广泛的一种网络协议,它是Transmission Control Protocol/Internet Protocol(传输控制协议/互联网协议)的简称。
TCPIP协议是一个由多个协议组成的协议族,在网络编程中负责进行数据的传输和路由。
Socket编程则是一种用于网络编程的编程接口或者调用接口。
通过Socket编程,我们可以实现在不同计算机之间的数据通信。
它提供了一种机制,使得这些数据通信可以像在本地计算机上进行文件读写一样简单。
要深入了解TCPIP协议与Socket编程,首先需要了解TCPIP协议的基本原理与组成。
TCPIP协议一共包含四层:网络接口层、网络层、传输层和应用层。
每一层都有不同的功能和任务。
在网络接口层,主要负责网络硬件设备的操作,包括控制网络适配器和数据线路等。
在网络层,主要负责寻找路由并且传输数据。
传输层则负责确保数据在源和目的之间进行可靠的传输。
最后,在应用层,各种应用程序可以通过不同端口号来进行数据的传输。
Socket编程则是通过创建Socket连接实现网络编程。
在Socket编程中,服务器端和客户端通过创建Socket对象实现数据的传输。
服务器端会监听某个端口号,并且等待客户端的连接请求。
当客户端请求连接时,服务器端会接收该请求并创建新的Socket进行通信。
要深入了解TCPIP协议与Socket编程,还需要了解一些常用的Socket编程的方法和函数。
比如,可以使用bind()函数将Socket与特定的IP地址和端口号进行绑定;使用listen()函数来监听连接请求;使用accept()函数来接收连接请求并创建新的Socket;使用connect()函数来连接服务器端的Socket。
实验三Socket通信实验报告

实验三Socket 通信实验报告1)实验目的和要求1. 掌握VB、VC++、VS 或JAVA 等集成开发环境编写网络程序的方法;2. 掌握客户/服务器(C/S)应用的工作方式;3. 学习网络中进程之间通信的原理和实现方法;4. 理解单播、组播和广播的原理并比较其不同之处;5. 要求本机既是客户端又是服务器端;2)实验内容所编写的程序应具有如下功能:1. 具有点对点通信功能,任意客户端之间能够发送消息;2. 具有群组通信功能,客户端能够向组内成员同时发送消息,其他组成员不能收到;3. 具有广播功能,客户端能够向所有其他成员广播消息;3)编程语言和环境1. 编程语言C/C++/C#/Java 等均可;2. 编程环境Windows (MS Visual 系列,VC/VB/ ;)和Linux (编辑器vi+编译器GCC )均可;4)实验主要功能实现说明以下为针对三个实验内容实现方法的简要说明,示例所用语言为C。
基于 C 的面向连接的socket 编程模型1. 点对点通信功能实现网络点对点通讯程序的关键步骤就是实现信息在网络中的发送和接收。
数据接收使用的是Socket,数据发送使用的是NetworkStream 。
1.1 利用Socket 来接收信息TcpListener tlListen1 = new TcpListener ( 8889 ) ;// 侦听端口号tlListen1.Start ( ) ;Socket skSocket = tlListen1.AcceptSocket ( ) ;// 接受远程计算机的连接请求,并获得用以接收数据的Socket 实例EndPoint tempRemoteEP = skSocket.RemoteEndPoint ;// 获得远程计算机对应的网络远程终结点while ( true ){Byte [] byStream = new Byte[80] ;// 定义从远程计算机接收到数据存放的数据缓冲区int i = skSocket.ReceiveFrom ( byStream , ref tempRemoteEP ) ;// 接收数据,并存放到定义的缓冲区中string sMessage = System.Text.Encoding.UTF8.GetString ( byStream ) ;// 以指定的编码,从缓冲区中解析出内容MessageBox.Show ( sMessage ) ;// 显示传送来的数据1.2 利用NetworkStream 来传送信息TcpClient tcpc = new TcpClient ( "10.138.198.213" , 8888 ) ;// 对IP 地址为“10.138.198.213 ”的计算机的8888 端口提出连接申请NetworkStream tcpStream = tcpc.GetStream ( ) ;// 如果连接申请建立,则获得用以传送数据的数据流string sMsg = " 您好,见到您很高兴" ;StreamWriter reqStreamW = new StreamWriter ( tcpStream ) ;// 以特定的编码往向数据流中写入数据, 默认为UTF8 编码reqStreamW.Write ( sMsg ) ;// 将字符串写入数据流中reqStreamW.Flush ( ) ;// 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流2. 群组通信功能组播编程需要UDP ,有两个类支持组播网络编程Socket 和UdpClient. 一台计算机要加入某一个组,然后接收发往这个组的信息。
winsock编程实验报告

winsock编程实验报告Winsock编程实验报告引言:Winsock(Windows Socket)是一种用于网络通信的编程接口,常用于开发基于TCP/IP协议的应用程序。
本篇文章将介绍我对Winsock编程的实验经历和心得体会。
实验目的:通过Winsock编程实验,深入了解网络通信原理和技术,掌握基于TCP/IP协议的应用程序开发方法。
实验环境:本次实验在Windows操作系统下进行,使用了Visual Studio 2019作为开发工具。
实验过程:1. 实验一:建立基于TCP的客户端/服务器通信在这个实验中,我首先创建了一个服务器程序和一个客户端程序。
服务器程序使用Winsock库函数创建了一个套接字,并绑定到指定的IP地址和端口上。
客户端程序通过Winsock库函数创建了一个套接字,并连接到服务器的IP地址和端口上。
通过这个实验,我学会了如何建立基于TCP的客户端/服务器通信。
2. 实验二:实现基于UDP的数据传输在这个实验中,我创建了一个基于UDP的数据传输程序。
UDP是一种无连接的传输协议,相对于TCP来说,它更加轻量级,适用于一些对数据可靠性要求不高的应用场景。
通过这个实验,我学会了如何使用Winsock库函数实现基于UDP的数据传输。
3. 实验三:实现多线程服务器在这个实验中,我将服务器程序改为多线程模式。
通过创建多个线程,服务器可以同时处理多个客户端的请求,提高了系统的并发性能。
这个实验让我更加深入地理解了多线程编程和网络通信的结合。
实验结果与分析:通过以上实验,我成功地实现了基于TCP和UDP的网络通信,并且在实验三中实现了多线程服务器。
在实验过程中,我遇到了一些问题,比如套接字的创建和绑定、连接的建立和断开等。
但通过查阅文档和调试,我最终解决了这些问题。
实验结果表明,Winsock编程是一种强大且灵活的工具,可以满足各种网络通信需求。
实验心得:通过本次实验,我对Winsock编程有了更深入的了解。
计算机网络实验一_Windows_Socket_编程

6
Socket套接字
目标:学习如何建立客户端/服务器应用程序,使用套接字 进行通信
套接字(socket): 应用进程之间的接口,实现端到端的传输
协议
应用层
进程
传输层 网络层 数据链路层 物理层
套接字
Internet
应用层
进程
传输层 网络层 数据链路层 物理层
由应用 开发者 控制
由操作 系统控制
Socket API 类别
PF_INET : 用于互联网编程 PF_UNIX: 用于Unix 管道编程
PF_PACKET:直接访问网络接口 (i.e, 绕过TCP / IP协议栈)
两种基本socket API分别支持两种传输服务:
SOCK_STREAM: 可靠的,字节流服务 (TCP) SOCK_DGRAM: 非可靠的数据报服务 (UDP)
90年代初,由Microsoft联合其他几家公司共同制 定了一套Windows下的网络编程接口,即Windows Socket规范。它是Berkeley Socket的重要扩充,主要 是增加了一些异步函数,并增加了符合Windows消 息驱动特性的网络事件异步选择机制。WinSock规 范是一套开放的、支持多种协议的Windows下的网 络编程接口。从1991年的1.0版到1995年的2.0.8版, 经过不断完善,已成为Windows网络编程的事实上 的标准。
7
WinSock DLL
WinSock与操作系统的关系
应用程序 1
应用程序 2
网络编程接口 ——如 WinSock API 网络通信协议 ——如 TCP/IP协议
操作系统 ——如 Windows 物理通信介质
动态链接库
16位版:WINSOCK.DLL 32位版:W不可靠数据报 可靠的,面向字节流的数据报
计算机网络原理实验三winsock套接字编程实验报告.云大软件学院doc

实验三、WINSOCK套接字编程实验报告序号: 10 姓名:学号:成绩指导老师:1.实验目的:用C或JA V A语言编写客户端、服务器程序,实现基于TCP或UDP的网络通信数据传输服务,熟悉基于TCP或UDP的Socket编程原理。
2.实验环境:建立在TCP/IP 网络体系结构之上计算机网络实验环境。
各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。
计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。
3.实验指导:参见套接字编程实验指导4.实验步骤(1)运行指导书中给出的参考程序,分析实验结果,并回答问题(1)-(3)(2)根据给定参考程序修改代码,完善修改服务器和客户端的功能。
并回答问题(4)-(5)5.实验结果分析(1)为什么在服务器和客户端要包含winsock2.h文件?答:这是系统自定义的“宏”,其中还包含了许多自定义的类型,如果不包含该文件,程序中会有许多类型无法识别。
(2)为什么在服务器和客户端程序中要加入#pragma comment(lib,"ws2_32.lib") 语句,如果不加会出现什么问题?答:这句话的意思是链接“ws2_32.lib”这个库,如果不加就链接不到这个库。
(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用程序会有什么问题?答:为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要使用WSAStartup函数。
如果不用,程序将无法调用Socket库中的其他函数。
(4)修改后的程序完成实现了什么功能,附上修改后的源代码。
(修改或填加的代码用波浪线标注,并填加注释),并附上实验截图#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include<conio.h>#include<winsock2.h>#include<windows.h>#pragma comment(lib,"ws2_32.lib")#define MYPORT 3490 /*定义用户连接端口*/#define BACKLOG 10 /*多少等待连接控制*/#define SERVER_IP_ADDR "113.55.16.10" /*服务器的IP地址*/int _tmain(int argc, _TCHAR* argv[]){SOCKET sock, msgsock;int length = 0;struct sockaddr_in server;struct sockaddr tcpaddr;char buf[1024] = "";int rval= 0, len= 0, err = 0;WORD wVersionRequested;WSADATA wsaData;/*指定socket版本,否则创建socket失败,即使创建socket返回值不为-1,但是bind 时会失败*/wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 )return -1;/* 建立套接字*/sock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0){perror("opening stream socket");exit(1);}/* 使用任意端口命名套接字*/server.sin_family = AF_INET;server.sin_port = htons(MYPORT);server.sin_addr.s_addr = inet_addr(SERVER_IP_ADDR);memset(server.sin_zero, 0, sizeof(server.sin_zero));//将服务器地址与socket绑定在一起rval = bind(sock, (struct sockaddr *)&server, sizeof(server));if (rval < 0){perror("binding stream socket");exit(1);}// 找出指定的端口号并打印出来length = sizeof(server);if (getsockname(sock, (struct sockaddr *)&server, &length) < 0){perror("getting socket name");exit(1);}printf("socket port #%d\n", ntohs(server.sin_port));// 开始接收连接,最大请求数为listen(sock, 5);len = sizeof(struct sockaddr);do{ msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len);if (msgsock == -1)perror("accept");else{ memset(buf, 0, sizeof(buf));if ( (rval = recv(msgsock, buf, sizeof(buf),0) < 0))perror("reading stream message");if (rval == 0)printf("-->%s\n", buf);}closesocket(msgsock);} while (TRUE);/* 因为这个程序已经有了一个无限循环,所以套接字"sock"从来不显式关闭。
计算机网络一TCPIP协议与Socket编程认识实验

东南大学自动化学院实验报告课程名称:计算机网络实验第 1 次实验实验名称:TCP/IP协议与Socket编程认识实验院(系):自动化专业:自动化姓名:学号:实验室:实验组别:同组人员:实验时间:2012年5月9日评定成绩:审阅教师:一、实验目的和要求:1. 熟悉TCP/IP协议的功能和网络操作;2. 了解MS-DOS环境下基于SOCKET的编程原理;3. 编写一个小型的Socket实用程序,初步了解Windows环境下使用Socket的编程。
二、实验原理:1.Windows Sockets规范:Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。
它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。
Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。
此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。
因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。
遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets 兼容实现的提供者,我们称之为Windows Sockets提供者。
一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。
任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三节TCP/IP协议编程实验
|━Windows环境下基于TCP/IP的信息传送程序设计
1.1实验目的:
1、掌握基于TCP/IP协议进行远程通讯的原理
2、掌握Sockets网络程序设计的原理和方法
3、理解面向连接服务、面向无连接的特点
1.2 实验任务
1 学会Winsock 网络编程基础
2 Winsock控件的属性和方法
1.3 实验环境
Windows98 或Windows2000 操作系统,编译环境任选。
1.4 实验方法
一、实验原理
(一)TCP/IP的特点和Socket
TCP/IP是网络上广泛应用的协议,其中IP是网络层的协议,它是无连接的;TCP是传输层的协议,它是面向连接的。
在实际系统中,TCP/IP通常在操作系统内核中实现,用户所能感受到的和可以用来进行网络程序开发的是操作系统提供的网络编程界面。
在TCP/IP 网络环境下,网络编程界面称为套接字(Socket)(见图1)。
图1、TCP/IP协议核心与应用程序关系图
图1中的应用程序1和2可以是位于不同主机上的2个进程,他们的作用方式是客户/服务器模式。
1、Sockets编程原理
(1)Sockets编程中的主要概念
●协议、地址、端口:
在Sockets编程中,传输层的协议既可以是TCP,也可以是UDP。
Sockets是用于网间进程通讯的,因此在标识上要进行网间进程标识。
地址是标识主机的,在Sockets编程中通常指IP地址;而端口标识通信的进程,它可以是1-65535间的任何一个数字,其中1-255保留给特定的服务、256-1023保留给其它的一般服务(如路由函数)、
1024-4999可以被任意的客户机端口使用、5000-65535可以被任意的服务器端口使用。
地址+端口就实现了网间进程标识。
(协议、本地地址、本地端口号、远程地址、远程端口号)是一组五元相关。
●面向连结、无连接、Socket类型:
传输层中的TCP协议是面向连接的,UDP协议是无连接的,因此Socket主要有两种类型:流套接字用于TCP/IP编程,提供面向连接的服务;数据报套接字用于UDP/IP编程,提供无连接的服务。
●网络字节顺序:
不同的计算机存放多字节值的顺序不同,为保证数据的正确性,在网络协议中必须指定网络字节顺序。
TCP/IP协议使用16位整数和32位整数的高位先存格式。
在编程中,调用htons()和htonl()函数来转换端口(短整型数值)和地址(长整型数值)参数的字节顺序(2)Sockets编程原理
●创建套接字:用socket()来创建套接字。
●指定本地地址:用bind()来指定本地地址。
●侦听连接:面向连接的服务中,服务器套接字在socket()和bind()后,就要调用listen()来侦听客户机的请求。
●建立套接字连接:面向连接的服务中,客户机在socket()和bind()之后,要调用connect()来向服务器请求连接,服务器在侦听到客户机的请求后,要调用accept()来接受连接。
●数据传输:当一个连接建立以后,就可以传输数据了。
在传输数据时,用到send()和recv()。
●输入/输出多路复用:用select()函数指定你想等待数据的套接字,当数据被套接字接收到以后,select()返回,并确定在输入队列中哪个套接字在等待数据,然后,就可以接收数据。
●关闭套接字:用closesocket()函数关闭套接字,并释放分配给该套接字的资源。
2、使用已封装好的类进行Windows Sockets编程
以上所提到的WinSock编程的方法和函数是标准Sockets调用和WinSock API所提供的,在Windows环境下使用任何编程语言、开发环境都可以实现。
现在,很多开发环境都提供了已经封装好的用于Windows Sockets编程的类,这些现成的类使得WinSock的程序开发更方便、快速。
图2演示了面向连接的流套接字的工作过程;图3演示了无连接的数据报。
二实验步骤
使用TCP/IP协议编写一个聊天程序。
(参见演示例子)
演示例子:
本例使用UDP协议建立一个“聊天”程序。
所谓“聊天”是指两个程序能够发送数据给对方,在此两个程序之间是平等的、处于同一地位,没有服务器和客户的区别。
另外,UDP程序不需建立显式的连接,所以在程序编写上比使用TCP方式简单。
建立“聊天A”程序的步骤如下:
(1)打开Visual Basic6.0中文版,创建标准工程。
在工具箱上单击右键,在弹出的菜单中选择“部件”菜单项,在弹出的“部件”对话框中,选中“Miscrosoft Windows Common Controls 6.0”和”Microsoft winsock Control 6.0”两个复选框。
单击“确定”按钮,所选择的控件出现在工具箱中,然后建立标准程序,并设置窗体标题为“聊天A”。
(2)把Winsock控件拖放到窗体中,并设置Protocol属性为1-sckUDPProtocol,其他属性为缺省值。
(3)在窗体上放置两个标签和文本框,设置两个标签的Caption属性分别为“接收窗”
和“发送窗”。
下面编写代码:
(1)在Form-Load过程中设置网络地址,这里要设置LocalPort,RemoteHost和RemotePort 属性。
为保证信息能够传送到相应程序,而按下面规则设置属性:“聊天A”的RemoteHost设置为运行“聊天B”程序的主机地址。
“聊天A”的RemotePort设置要与“聊天B”的LocalPort属性一致。
服务器的RemoteHost设置为客户程序的主机地址。
服务器的RemotePort设置要与客户LocalPort属性一致。
只有这样设置,两个程序间才能正常通信,这部分代码如下:
Private Sub Form-Load()
*设置双方网络地址
Winsock1.LocalPort=1024
Winsock1.RemoteHost=“202.99.6.101”
Winsock1.RemotePort=1997
End Sub
(2) 在文本框中Change事件中,发送用户输入的数据.
Private Sub Text1-Change ( )
*发送用户输入的内容
Winsock1.SendDate Text1.Text
End Sub
(3) 有数据到达时,显示对方的数据内容
Private Sub Winsock1-DataArrival (ByVal bytesTotal As Long)
Dim rec As String
*接收对方数据并在文本框内显示
Winsock1.GetData rec, vbstring
Text2.Text = rec
End Sub
到这里已经完成”聊天A”程序设计,保存并将其编译成执行文件.
接下来设计“聊天B”程序。
由于A,B是平等的,因此处理方式及流程一样,只需按上述原则在Form-Load中设置好其网络地址,其他部分则完全一样。
下面是“聊天B”程序的Form-Load过程代码。
Private Sub Form-Load()
*设置双方网络地址
Winsock1.LocalPort=1997
Winsock1.RemoteHost=“202.99.6.101”
Winsock1.RemotePort=1024
End Sub
完成“聊天B”的设计,将其存盘并编译。
现在可使用这两个程序进行对话了。
接下来,由同学们自己编写以下的程序,可以参照QQ的界面开发更多的功能。
1、一个人同时与多个人聊天。
2、多个人一起聊天
1.5参考材料:
1、Windows Sockets 规范及应用——Windows网络编程接口
(WsBook_ChineseEdtion.DOC);
2、Winsock和所用的编译环境的帮助文件;
3、任何涉及Windows网络编程的书。