如何在客户端上建立一个Socket与服务器端连接,包括连接的函数?
socket是用来和服务器通信的,无法直接调用服务器函数。
要实现功能,可以和服务器约定协议。
比如,在与服务器通信连接后,发送一系列标识符,最后加一个函数id,表示要求服务器调用约定的某一个函数。
服务器在接收到后,执行对应的函数,将结果返回给客户端即可。
listen函数的第二个参数是指服务端处理连接的队列大小,和能够连接客户端的数量没有关系。
比如:
listen(s,5) :表示如果服务端最多可以允许5个连接等待,这5个连接还没有正式建立(没有从accept函数返回),如果此时又有客户来连接将会连接失败。所以你说的问题不存在,或者你可以
listen(s,SOMAXCONN)。
格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码";
grant select,update,insert,delete on *.* to xuys@192.168.88.234 identified by "xuys1234";
查看结果,执行:
use mysql;
select host,user,password from user;
可以看到在user表中已有刚才创建的xuys用户。host字段表示登录的主机,其值可以用IP,也可用主机名,
将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到mysql服务器,建议在开发时设为%。
update user set host = '%' where user = 'xuys';
2、 ./mysqladmin -uroot -p21century reload
./mysqladmin -uroot -p21century shutdown
3、./mysqld_safe --user-root &
记住:对授权表的任何修改都需要重新reload,即执行第3步。
如果经过以上3个步骤还是无法从客户端连接,请执行以下操作,在mysql数据库的db表中插入一条记录:
use mysql;
insert into db values('192.168.88.234','%','xuys','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
update db set host = '%' where user = 'xuys';
重复执行上面的第2、3步。
【zhuokai】:Socket.RemoteAddress Socket.RemoteHost服务器端可以给连接上的客户端发送测试数据,一定时间内回收到客户端反应的可认为在线.【zhuokai】:请参考: http://www.programfan.com/article/showarticle.asp?id=2289【ylsl917】:我用的API,不是用的控件,我贴出代码来,麻烦大家给我修改一下吧procedure TForm1.OnWork1Accept(var message: TMessage);Var Client_Addr: TSockAddr; ClientLen: Integer; s:string;begin FillChar(Client_Addr,Sizeof(Client_Addr),0); ClientLen := Sizeof(Client_Addr); Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);{ 能不能在这里判断出建立的这个 Comm_Socket 是哪台机器建立的,其IP是多少?} //读取/关闭 事件 WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);end;【ylsl917】:解决了,只要 Client_Addr.sin_addr.S_addr 转换成字符串IP就行了 function IPIntToStr(I:Integer):String; var sinaddr:in_addr; begin sinaddr.S_addr:=i; result:=String(inet_ntoa(sinaddr)); end;【ylsl917】:还有谁上来说说怎么做到长连接!!!【wj19781215】:自己定义活动包探测客户端是否在线,不要用windows的全局活动包检测,至于长连接就是tcp哦。【ylsl917】:谢谢楼上的 还有一个问题啊 我用API实现socket 能不能让程序既是服务器端,又是客户端 【zhuokai】: 我用API实现socket 能不能让程序既是服务器端,又是客户端 意思是在同一个程序里客户端连接服务器?可以的,多个线程【wj19781215】:用getsockname和getpeername【abcdefgdeng】:在socketserver的onAccept事件中用Socket.RemoteAddress读取【ylsl917】: 我用API实现socket 能不能让程序既是服务器端,又是客户端 意思是在同一个程序里客户端连接服务器?可以的,多个线程
客户端源码(uClientMain.pas):
unit uClientMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ComCtrls, ToolWin, ExtCtrls, StdCtrls, Buttons;
const
SocketHost = '172.16.1.6'; //服务器端地址
type
TfrmClientMain = class(TForm)
ControlBar1: TControlBar;
ToolBar1: TToolBar;
tbConnected: TToolButton;
tbSend: TToolButton;
tbClose: TToolButton;
tbDisconnected: TToolButton;
ClientSocket: TClientSocket;
Edit1: TEdit;
Memo1: TMemo;
StatusBar: TStatusBar;
btnSend: TBitBtn;
procedure tbConnectedClick(Sender: TObject);
procedure tbDisconnectedClick(Sender: TObject);
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure tbSendClick(Sender: TObject);
procedure tbCloseClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketConnecting(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
ClientSocket组件为客户端组件。它是通信的请求方,也就是说,它是主动地与服务器端建立连接。
ServerSocket组件为服务器端组件。它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复。
ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的通信。因此,一个服务器端可以为多个客户端服务。
设计思路
本例包括一个服务器端程序和一个客户端程序。客户端程序可以放到多个计算机上运行,同时与服务器端进行连接通信。
本例的重点,一是演示客户端与服务器端如何通信;二是当有多个客户端同时连接到服务器端时,服务器端如何识别每个客户端,并对请求给出相应的回复。为了保证一个客户端断开连接时不影响其它客户端与服务器端的通信,同时保证服务器端能够正确回复客户端的请求,在本例中声明了一个记录类型:
type
client_record=record
CHandle: integer; //客户端套接字句柄
CSocket:TCustomWinSocket; //客户端套接字
CName:string; //客户端计算机名称
CAddress:string; //客户端计算机IP地址
CUsed: boolean; //客户端联机标志
end;
利用这个记录类型数据保存客户端的信息,同时保存当前客户端的连接状态。其中,CHandle保存客户端套接字句柄,以便准确定位每个与服务器端保持连接的客户端;Csocket保存客户端套接字,通过它可以对客户端进行回复。Cused记录当前客户端是否与服务器端保持连接。
下面对组件ServerSocket和ClientSocket的属性设置简单说明。
ServerSocket的属性:
· Port,是通信的端口,必须设置。在本例中设置为1025;
· ServerTypt,服务器端读写信息类型,设置为stNonBlocking表示异步读写信息,本例中采用这种方式。
· ThreadCacheSize,客户端的最大连接数,就是服务器端最多允许多少客户端同时连接。本例采用默认值10。
其它属性采用默认设置即可。
ClientSocket的属性:
· Port,是通信的端口,必须与服务器端的设置相同。在本例中设置为1025;
· ClientType,客户端读写信息类型,应该与服务器端的设置相同,为stNonBlocking表示异步读写信息。
· Host,客户端要连接的服务器的IP地址。必须设置,当然也可以在代码中动态设置。
其它属性采用默认设置即可。
qq英雄杀网页版和qq游戏大厅里的版本
在下载客户端之前都是从QQ游戏大厅登入,不过经常都要载入,麻烦的很,后来就从官网下载客户端了,虽说登入的时候麻烦点,都要输入密码,不过玩起来比较过瘾,不用等载入。手机端的话从官网扫二维码下载安装就可以了,但是手机端只能签到和领取奖励及聊天,不能玩游戏。英雄杀可以建立房间的qq游戏大厅版本 ...
管家婆普及版怎么录入销售价
答:进入自定义编辑里,重新定义相关的字段。(其它报表类似问题照办)。3、问:如何将打印格式恢复到系统默认的打印格式?答:将管家婆安装盘上的RWX.Zip文件解压,然后将其中您要恢复默认配置的打印对应的打印配置文件*.RWX复制到管家婆客户端的DATA目录下。4、为什么进货管理的应收帐款和销售管理的应付...
单播,多播和广播各有什么特点?
单播特点:一个单个的发送者和一个接受者之间通过网络进行的通信。1、服务器及时响应客户机的请求 2、服务器针对每个客户不同的请求发送不同的数据,容易实现个性化服务。多播特点:一个发送者和多个接受者之间的通信。广播特点:主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无...
Android8.0新特性【转】
假想一下(这不可能),适配了这一特性的淘宝客户端,我们可以屏蔽那些直播通知和促销推荐,物流信息、秒杀提醒则可以适当「放行」。 在早前的 Android 版本中,我们只能借助第三方启动器和通知读取工具(比如 Nova Launcher+Telsa)来实现通知角标效果。 Android 8.0 开始,应用可以在启动器图标上显示通知圆点来提示用户,但这...
请帮我了解计算机
cliconfg---SQL SERVER 客户端网络实用程序 Clipbrd---剪贴板查看器 conf---启动netmeeting compmgmt.msc---计算机管理 cleanmgr---垃圾整理 ciadv.msc---索引服务程序 osk---打开屏幕键盘 odbcad32---ODBC数据源管理器 oobe\/msoobe \/a---检查XP是否激活 lusrmgr.msc---本机用户和组 logoff---注销命令 ...
电子商务的核心价值是什么?
以互联网为依托的“电子”技术平台为传统商务活动提供了一个无比宽阔的发展空间,其突出的优越性是传统媒介手段根本无法比拟的。电子商务通常是指在全球各地广泛的商业贸易活动中,在因特网开放的网络环境下,基于客户端\/服务端应用方式,买卖双方不谋面地进行各种商贸活动,实现消费者的网上购物、商户之间的...
学习Java的,大学毕业一般从事些什么工作?
学习Java后能做哪些工作?据调查显示,2013年全国普通的高校毕业生规模达到690万,与2012年相比增加19万人,然而,招聘的岗位却仅仅达到2012年的80%。许多大学生在就业形势如此严峻的情形下,为毕业后能够找到一份好的工作,纷纷加入当下最热门的Java培训的阵营。Java是一个大的方向,工作内容也多有不同,...
JAVA编程思想一共有几章
1.7 对象的创建和存在时间1.7.1 集合与继承器1.7.2 单根结构1.7.3 集合库与方便使用集合1.7.4 清除时的困境:由谁负责清除?1.8 违例控制:解决错误1.9 多线程1.10 永久性1.11 Java和因特网1.11.1 什么是Web?1.11.2 客户端编程1.11.3 服务器端编程1.11.4 一个独立的领域:应用程序1.12 分析和设计1.12.1 不...
腾讯剑魂12月4日更新公告
注意事项:本次停服维护为所有服务器;维护时间:12月4日上午9:00-11:00(维护时间可能会有所浮动,请关注官网最新公告)维护对象:全服;具体更新内容如下:新增内容:(轩辕传奇2正式开放)一、1)游戏视角模式:开放游戏3D开天视角,玩家可以在首次登录的客户端进行2.5D经典视角和3D开天视角的选择,使用不同...
谁有自考2008版《电子商务网站设计原理》的复习笔记,麻烦发下,谢谢...
打开一个Web 文件的基本步骤如下:A 在浏览器中指定要访问的Web 文件的URL.B 浏览器将请求发给服务器。C 服务器将靖求转递给指定URL 处的服务器。D 该服务器将文件送回到服务器上。E 服务器将文件送回到客户端浏览器上。F 浏览将文件显示在计算机屏幕上。2. IP 地址与域名之间存在对应关系吗?如果存在,那么...
邴购潘多: 一般socket链接有以下两种方式:长(常)链接和短链接. 长链接:当数据发送完成后socket链接不断开.一直保留到异常或者是程序退出为止 ,这种方式的好处是不用每次去发起连接断开,在速度上可以比短连接要快一些,但是相 对来说对服务器的资源
高密市17091005462: 如何创建一个socket并进行通信 - ?
邴购潘多: Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递.在java中,有专门的socket类来处理用户的请求和响应.利用SOCKET类的方法,就可以实现两台计算...
高密市17091005462: SocketTool怎么用/如何建立Socket服务端/客户端 - ?
邴购潘多: 以 TCP 举例:(1) 建立服务端时,请选择左侧树形菜单中的 “TCP Server”,然后点击上方的“创建”按钮,会弹出一个窗口,输入 TCP “监听端口”即可.(2) 建立客户端时,请选择左侧树形菜单中的“TCP Client”,然后点击上方的“创建”按钮,在弹出的对话框中,输入对方 IP,由于你在本地启动的服务端,所以 IP 输入 127.0.0.1 即可,然后在“对方端口”中输入步骤 (1) 时设定的端口号,然后,点击上方的“连接”按钮,如此,客户端与服务端的 TCP 连接便已建立.(3) 在左侧会 TCP Server 和 TCP Client 树形下会多出一个已建立的连接,点击它后,在右侧可以给对端发送消息.
高密市17091005462: 我想问下如何在手机上建立一个服务器,用Socket的方法如何实现. - ?
邴购潘多: TCP方式:TCP协议客户端实现://创建一个Socket对象,指定服务器端的IP地址和端口号 Socketsocket=newSocket("192.168.1.104",4567);//使用InputStream读取硬盘上的文件,这里只是用文件当做信息源,可以读取控件用户输入信息 ...
高密市17091005462: Java中建立一个socket客户端需要几步 - ?
邴购潘多: 代码给你自己看去:Socket socket = new Socket("192.168.1.72", 4700);// 向本机的4700端口发出客户请求BufferedReader sin = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));// 由系统标准输入构造...
高密市17091005462: 如何android native 创建socket server - ?
邴购潘多: 参考如下内容,建立socker连接: 1. 建立Socket连接 1) Socket 实现了TCP/IP协议,可以连接到网络上的上脑,并收发数据2) ServerSocket 用于服务端,可以监听服务端口,等待客户端连接,连接后可以生成用于传输数据的Socket 3) 创建服...
高密市17091005462: 如何在linux服务器上建立soket通信 - ?
邴购潘多: 客户端通过创建socket,然后调用connect设定服务器的IP地址和端口,建立连接后就可以发送数据给服务器或从服务器接收数据;服务器这端一般需要绑定服务端口,然后监听来自相应端口的客户端的请求,并给出响应.一般流程,客户端: socket->connect->write/read 服务器: socket->bind->listen->accept->write/read
高密市17091005462: JAVA 问题,用socket编写一个客户端程序 - ?
邴购潘多: 给你一个我写的示例,用的是基于TCP的Socket技术,你锻炼一下,改一改,不会改再找我!客户端:import java.net.Socket; import java.io.InputStream; import java.io.OutputStream; import java.io.InputStreamReader; import java.io....
高密市17091005462: MFC CSocket 客户端有很多界面怎么创建socket可以使多个界面共用1个socket?
邴购潘多: 把socket放到一个单独的类中,定义成static变量
高密市17091005462: 请简述服务器端程序实现思路 - ?
邴购潘多: 需要用到socket编程的相关知识. 也不知道你是要在windows下面做还是linux下做,因此给你提供个思路,两个操作系统下的思路是一样的,他们都提供了网络编程的相关函数. 需要一个客户端程序和一个服务器端的程序. 此处以创建一个...