基于IPv6的网络编程(文件传输,聊天)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

课程:ipv6

学号:20082212285 姓名:付希善

班级:网络0802 教师:李阿丽

鲁东大学

信息科学与工程学院

设计名称与内容

一、Winsock编程技术

Windows Sockets是Windows下网络编程的规范,是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。经过不断完善它已成为Windows 网络编程的事实上的标准。 Winsock是windows应用程序与下层网络协议之间的交互接口,通过socket,可以很容易的实现应用程序的网络连接。Winsock 也是Windows 进行网络通信编程的API接口。在网络编程中最常用的方案是客户/服务器模式,首先由服务器在指定的端口开通指定的服务,然后在客户机上通过指定服务器地址、服务端口来连接服务器以获取指定的服务。

二、聊天程序的功能及其相关网络协议

使用可靠的TCP来实现端到端的连接,使用到的协议是TCP协议。采用的体系结构风格是服务器/客户端风格(C/S)。服务器端建立socket连接,然后监听端口,等待客户端的连接。在客户端连接之前,消息编辑窗口都设置为不可编辑状态。当有客户端连接后,消息编辑窗口才设置为可编辑状态。本程序的功能就是实现简单的基于TCP 协议的聊天,即简单的消息发送。

三、聊天程序流程图和设计方案

1)聊天程序流程图

2)设计方案

服务器端的设计:

服务器端的界面由一个主窗口加三个控件组成,其中有两个edit 控件和一个button 控件。程序设计窗口截图如下:

指定好服务端口号,本程序指定为1111。然后建立窗口函数所关心的SOCKET 通信消息,为程序为FD_ACCEPT 和FD_READ 。在服务器端建立本地socket ,用bind 函数绑定本地套接字地址,最大连接数设置为5。完成之后进行监听,看是否有客户端请求连接,若有则接受连接。

建立连接之后用,如果要发送数据,则在下面的sendEdit 里面输入想要发送的内容,然后点击“发送”按钮。”发送”按钮发送出一个WM_COMMAND 消息,窗口函数接

服务器端 socket 函数建立套接字 bind 函数给套接字指定本地地址

listen 函数进行监听

accept 函数建立连接

建立连接,从accept 返回用于通

信的新套接字

建立连接

send 函数和recv 函数收发数据

Closesocket 函数关闭套接字

connect 函数与服务器建立连接

send 函数和recv 函数收发数据 Closesocket 函数关闭套接字

客户端

socket 函数建立套接字

收WM_COMMAND消息,将接收到的消息用send函数发送出去。当客户端有消息发送过来的时候,同样的要捕获消息,用recv函数进行接收数据。通信结束之后释分配给套接字的资源。

客户端的设计:

客户端的界面设计和服务器端的基本一致,是窗口标题不同。程序设计窗口截图如下:

指定好待连接的服务器的IP地址和服务器端口号,很显然地端口和服务器设置的一样,为1111。然后建立窗口函数所关心的SOCKET通信消息,这里需要设置FD_ACCEPT 和FD_CONNECT。根据连接服务器的套接字,使用connect函数建立连接。当要发送消息的时候则在下面的sendEdit里面输入想要发送的内容,然后点击“发送”按钮。”发送”按钮发送出一个WM_COMMAND消息,窗口函数接收WM_COMMAND消息,将接收到的消息用send函数发送出去。当客户端有消息发送过来的时候,同样的要捕获消息,用recv函数进行接收数据。通信结束之后释分配给套接字的资源。

四、选择开发环境

开发环境: Visual C++ 6.0

设计过程(步骤)或程序代码

源程序:

1)服务器端.

#include

#include

#define ID_RECEIVEEDIT 1

#define ID_SENDEDIT 2

#define ID_PUSHME 3

#define SERVER_PORT 1111

#define WM_SOCKET (WM_USER+1)

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,

LPSTR lpcmdLine,int nCmdShow)

{

static TCHAR szAppName[]=TEXT("ChatServer");

static TCHAR szClassName[]=TEXT("ChatServerClass");

HWND hwnd;

MSG msg;

WNDCLASS wndclass;

wndclass.style =CS_HREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc =WndProc;

wndclass.cbClsExtra =0;

wndclass.cbWndExtra =0;

wndclass.hInstance =hInstance;

wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);

wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName =NULL;

wndclass.lpszClassName=szClassName;

if(!RegisterClass(&wndclass))

{

MessageBox(NULL,TEXT("This program requires Windows NT!"),

szAppName,MB_ICONERROR);

return 0;

}//注册窗口类

hwnd=CreateWindow(szClassName,TEXT("Simple WinSock Chat Server"),

WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

NULL,NULL,hInstance,NULL);//建立主窗口

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}//消息循环

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {

HINSTANCE hInstance;

static HWND hwndReceiveEdit,hwndSendEdit,hwndPushButton;

int nSize;

WSADATA WSAData;

static struct sockaddr_in server,from;

static SOCKET local_server,local_listen;

int nError;

WORD wEvent,wError;

相关文档
最新文档