毕业论文《基于socket 的局域网聊天工具》,要求C++语音编写,要有程序,能实现,有文档……

毕业论文《基于socket 的局域网聊天工具》,要求C++语音编写,要有程序,能实现,有文档……,第1张

“对图中的那些函数,我这里稍加解释一下。”

int  WSAStartup(WORD wVersionRequested, LPWSADATA  lpWSAData)

功能是初始化Windows Socket Dll,在Windows下必须使用它。

参数:

“wVersionRequested”表示版本,可以是1.1、2.2等;

“lpWSAData”指向WSADATA数据结构的指针。

int socket(int family, int type, int protocol)

功能是建立Socket,返回以后会用到的Socket值。如果错误,返回-1。

参数:

“int family”参数指定所要使用的通信协议,取以下几个值:AF_UNIX(Unix内部协议)、AF_INET(Internet协议)、AF_NS Xerox(NS协议)、AF_IMPLINK(IMP连接层),在Windows下只能把“AF”设为“AF_INET”;

“int type”参数指定套接字的类型,取以下几个值:SOCK_STREAM(流套接字)、SOCK_DGRAM (数据报套接字)、SOCK_RAW(未加工套接字)、SOCK_SEQPACKET(顺序包套接字);

“int protocol”参数通常设置为0。

int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

功能是把套接字和机器上一定的端口关联起来。

参数:

“sockfd”是调用socket()返回的套接字值;

“my_addr”是指向数据结构struct sockaddr的指针,它保存你的地址,即端口和IP地址信息;

“addrlen”设置为sizeof(struct sockaddr)。

int listen(int sockfd, int backlog)

功能是服务端监听一个端口,直到accept()。在发生错误时返回-1。

参数:

“sockfd”是调用socket()返回的套接字值;

“backlog”是允许的连接数目。大多数系统的允许数目是20,也可以设置为5到10。

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)

功能是客户端连接服务端监听的端口。

参数:

“sockfd”是调用socket()返回的套接字值;

“serv_addr”保存着目的地端口和IP 地址的数据结构struct sockaddr;

“addrlen”设置为sizeof(struct sockaddr)。

int accept(int sockfd, void *addr, int *addrlen)

功能是服务端接受客户端的连接请求,并返回一个新的套接字,以后服务端的数据传输就使用这个新的套接字。如果有错误,返回-1。

参数:

“sockfd”是和listen()中一样的套接字值;

“addr”是个指向局部的数据结构sockaddr_in的指针;

“addrlen”设置为sizeof(struct sockaddr_in)。

int send(int sockfd, const void *msg, int len, int flags)

int recv(int sockfd, void *buf, int len, unsigned int flags)

功能是用于流式套接字或数据报套接字的通讯,我们数据的真正传输就由它们完成。

参数:

“sockfd”是发/收数据的套接字值;

“msg”指向你想发送的数据的指针;

“buf”是指向接收数据存放的地址;

“len”是数据的长度;

“flags”设置为 0。

int sendto(int sockfd, const void *msg, int len, unsigned int flags,const struct sockaddr *to, int tolen)

int recvfrom(int sockfd, void *buf, int len, unsigned int flags,  struct sockaddr *from, int *fromlen)

功能和send、recv类似,不过是用于无连接数据报套接字的传输。

int closesocket(int sockfd)

功能是关闭套接字。

参数“sockfd”为要关闭的套接字值。

程序:

“这里的目的是让大家对Socket编程有个整体了解。不用怕,程序我会详细解释的,首先是服务端的程序。其流程是:

socket()→bind()→listen→accept()→recv()/send()→closesocket()

具体代码如下:”

#include <stdio.h>

#include <winsock.h>

#pragma comment(lib,"Ws2_32")

#define MYPORT 830  /*定义用户连接端口*/

#define BACKLOG 10  /*多少等待连接控制*/

int main()

{

int sockfd, new_fd                                  /*定义套接字*/

struct sockaddr_in my_addr          /*本地地址信息 */

struct sockaddr_in their_addr        /*连接者地址信息*/

int sin_size

WSADATA ws

WSAStartup(MAKEWORD(2,2),&ws)           //初始化Windows Socket Dll

//建立socket

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

//如果建立socket失败,退出程序

printf("socket error\n")

exit(1)

}

//bind本机的MYPORT端口

my_addr.sin_family = AF_INET                     /* 协议类型是INET  */

my_addr.sin_port = htons(MYPORT)            /* 绑定MYPORT端口*/

my_addr.sin_addr.s_addr = INADDR_ANY   /* 本机IP*/

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)

{

//bind失败,退出程序

printf("bind error\n")

closesocket(sockfd)

exit(1)

}

//listen,监听端口

if (listen(sockfd, BACKLOG) == -1)

{

//listen失败,退出程序

printf("listen error\n")

closesocket(sockfd)

exit(1)

}

printf("listen...")

//等待客户端连接

sin_size = sizeof(struct sockaddr_in)

if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)

{

printf("accept error\n")

closesocket(sockfd)

exit(1)

}

printf("\naccept!\n")

//有连接,发送ww0830字符串过去

if (send(new_fd, "ww0830\n", 14, 0) == -1)

{

printf("send error")

closesocket(sockfd)

closesocket(new_fd)

exit(1)

}

printf("send ok!\n")

//成功,关闭套接字

closesocket(sockfd)

closesocket(new_fd)

return 0

}

对服务端程序的流程概括:

先是初始化Windows Socket Dll: WSAStartup(MAKEWORD(2,2),&ws)

然后建立Socket: sockfd = socket(AF_INET, SOCK_STREAM, 0)

再bind本机的MYPORT端口:

my_addr.sin_family = AF_INET         /* 协议类型是INET   */

my_addr.sin_port = htons(MYPORT)       /* 绑定MYPORT端口  */

my_addr.sin_addr.s_addr = INADDR_ANY   /* 本机IP           */

bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))

接下来监听端口: listen(sockfd, BACKLOG)

如果有客户端的连接请求,接收它: new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)

最后发送ww0830字符串过去: send(new_fd, "ww0830\n", 14, 0)

收尾工作,关闭socket: closesocket(sockfd)    closesocket(new_fd)  ”

编译、执行,就会一直监听830端口

客户端程序了。其流程是:

socket()→connect()→send()/recv()→closesocket()

比服务端更简单吧!其实现代码如下:”

#include <stdio.h>

#include <stdio.h>

#include <winsock.h>

#pragma comment(lib,"Ws2_32")

#define PORT 830                            /* 客户机连接远程主机的端口 */

#define MAXDATASIZE 100                     /* 每次可以接收的最大字节 */

int main(int argc, char *argv[])

{

int sockfd, numbytes

char buf[MAXDATASIZE]

struct sockaddr_in their_addr        /* 对方的地址端口信息 */

if (argc != 2)

{

//需要有服务端ip参数

fprintf(stderr,"usage: client hostname\n")

exit(1)

}

 WSADATA ws

WSAStartup(MAKEWORD(2,2),&ws)         //初始化Windows Socket Dll

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

//如果建立socket失败,退出程序

printf("socket error\n")

exit(1)

}

//连接对方

their_addr.sin_family = AF_INET                         /* 协议类型是INET  */

their_addr.sin_port = htons(PORT)                       /* 连接对方PORT端口 */

their_addr.sin_addr.s_addr = inet_addr(argv[1])        /* 连接对方的IP */

if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1)

{

//如果连接失败,退出程序

printf("connet error\n")

closesocket(sockfd)

exit(1)

}

//接收数据,并打印出来

if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)

{

//接收数据失败,退出程序

printf("recv error\n")

closesocket(sockfd)

exit(1)

}

buf[numbytes] = '\0'

printf("Received: %s",buf)

closesocket(sockfd)

return 0

}

对客户端程序的流程概括:

首先是初始化Windows Socket Dll: WSAStartup(MAKEWORD(2,2),&ws)

然后建立Socket: sockfd = socket(AF_INET, SOCK_STREAM, 0)

接着连接服务器方:

their_addr.sin_family = AF_INET                                 /* 协议类型是INET    */

their_addr.sin_port = htons(PORT)                           /* 连接对方PORT端口      */

their_addr.sin_addr.s_addr = inet_addr(argv[1])         /* 连接对方的IP  */

connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr))

连接成功就接收数据: recv(sockfd, buf, MAXDATASIZE, 0)

最后把收到的数据打印出来并关闭套接字:

printf("Received: %s",buf)      closesocket(sockfd)

编译结束后,运行服务端,然后。客户端 服务端IP  回车

你会看到服务端发来得数据。

那么基本的点对点通信就没问题了。只要两台机器同时包含服务端和客户端,就可以互相通信了。

当然,你也可以将服务端和客户端分开做,专门一个服务器负责用户登录和转发消息。

流程如下:

A客户端发登录消息-----》服务器

服务器验证发送用户消息----》客户端

A客户端想发消息给B客户端----》先发给服务端

服务器得到消息查询B客户端IP并转发消息。(或者B客户端循环发消息询问服务器有无消息)

通信结束。

哈哈...主题貌似比较简单, 我来把.

英语商科~. 语法和词汇使用的正确率可以保证99%或者全对~~

*^_^*

Along with the popularizing rate of computers, the online chat got closer to our daily life. As a convenient option, most people prefer the voice chat than just typing.

This thesis is to discuss the controlling program of the text message and voice message transmission, which is programmed under VC++ environment. This program is mainly composed with the type of MFC Dialog Program to fulfil the voice chat function on internet.

The main body is mainly to talk about socket programming, voice transmission system and the process (method) that how to fulfil the voice chat.

The idea of this program can be divided into 3 parts. The first part is to build up the service port and the customer port. The second part is about the transmission of text messages. The third part is about the transmission of voice messages. The whole program is based on C/S mode and uses the Transport Control Protocol (TCP), which can fulfil the function of the voice chat of one point to multi-points.

( 注, 那个一点对多点别"spot", spot主要用在污点/斑点 -_-|| .. 而且点对点连接正确的词是point-to-point connection, 所以"多点"就是 multi-points )

keywords: socket programming, voice transmission, internet transmission

我看到5173毕业设计网这方面的资料很多[图文]

基于c/s结构的局域网聊天程序

[内容预览]

37

|

2010-11-13 3

局域网聊天程序系统设计

3.1系统结构设计本系统采用c/s结构,最重要的特点是非对等相互作用,即客

户与服务器处于不平等的地位,服务器拥有客户所不具备的硬软件资源,客户和服务器分别是服务的请求者

和提供者。网... [阅读全文][图文]

基于c/s模式的小型超市进存销管理系统

[内容预览]

27

|

2010-11-09 2系统总体设计

2.1

功能概述

根据进存销管理系统的逻辑划分,本系统一共分为七个功能,分别是资料

维护、进货管理、销售管理、库存查询、系统管理、历史查询、帐目查询。

(1)

资料管理主要包括商品

资料、供货... [阅读全文][图文]

基于c/s模式的理财系统软件

[内容预览]

9

|

2010-11-07 3.用户需求分析根据用户需求的分析,系统可以分成以下几个功能:

3.1用户登陆功能用于用户登陆进入系

统的界面,用户需要建立一个账号和密码才能进入使用系统,当用户输入自己的账号和密码时,系统进行验

证,如果正确... 具体的你去他们网站看看,真的挺不错的,直接在搜索引擎搜索“5173论文”就能看到了~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7820950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存