哪位老大知道!程序连接服务器的原理是什么?

假如要弄个聊天软件
1. 登陆输入的验证信息按下“登陆”的时候,
①是直接连接到数据库(比如MySQL),就是登陆程序自带MySQL语句,然后返回结果呢,
②还是先与服务器通信,等待服务器控制台逐个索取验证信息,然后服务器控制台再和服务器数据库匹配信息,再通过控制台返回匹配结果给客户端?
2. 登陆程序内一定要写用到的公网IP吗?
3. 据说把数据库放到公网的做法比较危险,那可不可以程序连接到某个网站,再通过网站访问到服务器(假设网站不是在同一台服务器上),然后获取登陆结果,通过网站传回客户端?

最近比较闲,突然想做一个聊天室,于是就使用了JavaFX做界面,Java作为主要语言,Socket通信,云服务器的MySQL存储用户信息。
登陆界面刚做完就想到上面的三个问题,我是不是要在登陆界面的后台那就写着连接到服务器的公网IP地址,万一某天公网IP突然改了那我程序不就连接不到服 务器了?还有就是QQ的登陆客户端,它的源码里面是不是有个地方写着 腾讯QQ服务器 的公网IP地址,然后连接到这个公网IP,又有路由帮分配到各个服 务器内部进行数据处理?还是说,QQ它内部没有公网IP,用其他不需要IP的方式访问服务器?

有点懵,不知道从哪入手,百度也查了好久,现在写的Java能聊天,但感觉一大堆安全问题,处理多客户端通信也有点问题。

望各位路过的大佬解答下,如果是需要某种编程技能或语言顺便说下吧。

对一个网络应用而言,基本架构如下:
1、在安全的环境构造数据库服务器
2、在网络服务器构造数据服务
3、在客户端请求网络服务器索取数据
面向你所说的情况而言,基本操作流程如下:
1、客户端搜集数据(用户名、密码等)
2、连接服务器(即连接数据服务)
3、提交数据(数据交给数据服务处理)
4、接收校验结果

那数据服务和客户端的通信一般是用socket吗还是webserver之类的

不是访问一个域名,相当于一个浏览器去请求页面,谁敢将数据库地址与密码写进文件中,万一被破解了哭都来不及

都行,看具体应用,没有特殊要求,还是用现成的吧,传个JSON、XML啥的。

首先 第一个问题 你的用户验证通过走的是网管域名。换了公网 是对访问没影响。 第二就是 各个客户端 在启动的时候 会与服务器建立连接。保证连接状态。主要是客户端ip等信息。要有个服务端统一做处理。确定这个消息应该发给谁。 客户端同时有发送和接收的 通道。

其实我一直有个好奇的和不懂的地方,比如,通过socket连接,登陆客户端想查询这个用户是不是存在,那么如果直接在客户端写查询的SQL语句就很简 单,但是不安全我知道。可如果通过socket先连接到服务端的服务程序,也就是先经过服务程序,间接地去查询数据库记录这个我也理解。

但就是,socket怎么能把我传过去的一个东西识别出来是账号还是密码呢?(接口一致的情况下发送的不都是字符串吗?)

如果是有先后顺序那同时读取多个好友的消息的时候,客户端又怎么识别出发过来的字符串是针对哪个好友的,如果说在字符串里面加上关键字比如“QQID = 1578324”那要是消息里面也含有"QQID = 1578324"的字符串内容,这样识别不就出问题了吗?

可能我描述得不够清楚,还请多多包涵,但确实这个地方我一直没搞明白,描述可能会有些怪。

(猜测)
消息来源辨别    例如     QQid=“00000”
和内容     例如   message=”QQID=00000”
是只识别等号前面的,不管里边有啥吧
(猜)所以不混・_・?(我也不大懂)

与json相联系起来,json是键值对,也就是key:value。这样就可以进行区分ID:“00000”,message:"ID:00000",password:"12345678"

这种聊天室是不是在哪个环节要做个连接池什么的,网上找了好多说,连接数据库查询再断开再连接查询再断开效率很低,是不是这样

声明本人小白,(但是看到这里手痒想参与讨论)

本地的程序,只需要以固定格式发数据给服务器(肯定靠ip发过去的),并可以读懂服务器返回的数据是如何显示就好。数据里有干什么操作,内容等信息

服务器端接收到数据,判断是要登录,还是要发消息给谁,连接数据库完成操作,得到结果,并判断要发给哪几个人(ip),发什么内容

只尝试过lamp,盲猜java同,且据说java服务器
lrc歌词很强
(ps...大概不会被骂吧...

登录时候让客户机的代码去连接数据库是非常不安全的,简直就像把金库的大门敞开还无人看守。合理的做法是做一套服务器程序,接受客户机的socket连接 请求,连接完成后根据客户机的各种请求由服务器去操作数据库,需要对外开放的只是服务器的地址和端口号,数据库是不会被外来程序连接的(它只会被指定的服 务器程序连接和操作)。
客户机与服务器连接都是需要相匹配的格式的,比如第N个字节代表什么意思,或者第M个字节代表后续的数据长度,这样一套格式下来,接收方就能读懂发送方的 意思了,这就是协议。协议有一些是公开供所有人共用的,比如HTTP、FTP等,它有一整套的规定,只要发送方和接收方都遵循这套规定,双方就能互相通 讯。我们使用IE或者Chrome能浏览同个网站而且显示出来的页面基本相同,就是因为HTTP协议的作用。如果客户机和服务器都是你或者你的团队做的, 那你也可以自定一套协议。

网页端的吗,网页端不是不用socket吗 都包装好了呀 ,所有的计算不都应该交给服务器吗 客户端只提供客户信息  客户端验证吧

自己规定协议啊 模仿一下http 网络上流的都是字节流  比如:
#login(协议头)-756859-123456
服务器获得这串字符之后一层层解析字符串
先读协议头得知接下来要做的事情如果是登陆
那接下来肯定是账号和密码,取出来做验证再返回给客户端
成功返回#loginsuccess 失败返回。。。

原来如此,看来想做个聊天室不大容易

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值