如何在客户端上建立一个Socket与服务器端连接,包括连接的函数?
进入mysql,创建一个新用户xuys: 格式: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 shutdown3、./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);VarClient_Addr: TSockAddr;ClientLen: Integer;s:string;beginFillChar(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;varsinaddr:in_addr;beginsinaddr.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;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ScktComp, ComCtrls, ToolWin, ExtCtrls, StdCtrls, Buttons;constSocketHost = '172.16.1.6'; //服务器端地址typeTfrmClientMain = 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组件建立单独的连接,进行单独的通信。因此,一个服务器端可以为多个客户端服务。设计思路本例包括一个服务器端程序和一个客户端程序。客户端程序可以放到多个计算机上运行,同时与服务器端进行连接通信。本例的重点,一是演示客户端与服务器端如何通信;二是当有多个客户端同时连接到服务器端时,服务器端如何识别每个客户端,并对请求给出相应的回复。为了保证一个客户端断开连接时不影响其它客户端与服务器端的通信,同时保证服务器端能够正确回复客户端的请求,在本例中声明了一个记录类型:typeclient_record=recordCHandle: 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地址。必须设置,当然也可以在代码中动态设置。 其它属性采用默认设置即可。

socket编程怎么写一个客户端和两个服务端
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 下面用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159【服务器端】#include "stdafx.h"#include #include #include #define SERVER_PORT 5208 //侦听端口void main(){WORD wVersionRequested;WSADATA wsaData;int ret, nLeft, length;SOCKET sListen, sServer; //侦听套接字,连接套接字struct sockaddr_in saServer, saClient; //地址信息char *ptr;//用于遍历信息的指针//WinSock初始化wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本ret=WSAStartup(wVersionRequested, &wsaData);if(ret!=0){printf("WSAStartup() failed!n");return;}//创建Socket,使用TCP协议sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sListen == INVALID_SOCKET){WSACleanup();printf("socket() faild!n");return;}//构建本地地址信息saServer.sin_family = AF_INET; //地址家族saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址//绑定ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));if (ret == SOCKET_ERROR){printf("bind() faild! code:%dn", WSAGetLastError());closesocket(sListen); //关闭套接字WSACleanup();return;}//侦听连接请求ret = listen(sListen, 5);if (ret == SOCKET_ERROR){printf("listen() faild! code:%dn", WSAGetLastError());closesocket(sListen); //关闭套接字return;}printf("Waiting for client connecting!n");printf("Tips: Ctrl+c to quit!n");//阻塞等待接受客户端连接while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。{length = sizeof(saClient);sServer = accept(sListen, (struct sockaddr *)&saClient, &length);if (sServer == INVALID_SOCKET){printf("accept() faild! code:%dn", WSAGetLastError());closesocket(sListen); //关闭套接字WSACleanup();return;}char receiveMessage[5000];nLeft = sizeof(receiveMessage);ptr = (char *)&receiveMessagewhile(nLeft>0){//接收数据ret = recv(sServer, ptr, 5000, 0);if (ret == SOCKET_ERROR){printf("recv() failed!n");return;}if (ret == 0) //客户端已经关闭连接{printf("Client has closed the connectionn");break;}nLeft -= ret;ptr += ret;}printf("receive message:%sn", receiveMessage);//打印我们接收到的消息。}//closesocket(sListen);//closesocket(sServer);//WSACleanup();}【客户端】#include "stdafx.h"#include #include #include #define SERVER_PORT 5208 //侦听端口void main(){WORD wVersionRequested;WSADATA wsaData;int ret;SOCKET sClient; //连接套接字struct sockaddr_in saServer; //地址信息char *ptr;BOOL fSuccess = TRUE;//WinSock初始化wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本ret = WSAStartup(wVersionRequested, &wsaData);if(ret!=0){printf("WSAStartup() failed!n");return;}//确认WinSock DLL支持版本2.2if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2){WSACleanup();printf("Invalid WinSock version!n");return;}//创建Socket,使用TCP协议sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sClient == INVALID_SOCKET){WSACleanup();printf("socket() failed!n");return;}//构建服务器地址信息saServer.sin_family = AF_INET; //地址家族saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");//连接服务器ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));if (ret == SOCKET_ERROR){printf("connect() failed!n");closesocket(sClient); //关闭套接字WSACleanup();return;}char sendMessage[]="hello this is client message!";ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);if (ret == SOCKET_ERROR){printf("send() failed!n");}elseprintf("client info has been sent!");closesocket(sClient); //关闭套接字WSACleanup(); }

Java的Socket编程?
要通信首先要建立socket链接。 1 ab客户端与服务端建立socket链接2 a客户端发送消息到服务端3 服务端收到消息后,发送到指定的b客户端 4 b客户端处理来自服务端的消息

c# socket网络编程,如何实现多客户端和服务器通信 ?
服务端要有客户端列表,你服务端可能就一个客户端对象,写成数组。
服务器端: namespace SocketServer{class Program{private static byte[] result = new byte[1024];private static int myProt = 8885; //端口static Socket serverSocket;static void Main(string[] args){//服务器IP地址IPAddress ip = IPAddress.Parse("127.0.0.1");serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);serverSocket.Bind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口serverSocket.Listen(10); //设定最多10个排队连接请求Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());//通过Clientsoket发送数据Thread myThread = new Thread(ListenClientConnect);myThread.Start();Console.ReadLine();}///
/// 监听客户端连接/// private static void ListenClientConnect(){while (true){Socket clientSocket = serverSocket.Accept();clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));Thread receiveThread = new Thread(ReceiveMessage);receiveThread.Start(clientSocket);}}///
/// 接收消息/// ///
private static void ReceiveMessage(object clientSocket){Socket myClientSocket = (Socket)clientSocket;while (true){try{//通过clientSocket接收数据int receiveNumber = myClientSocket.Receive(result);Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));}catch(Exception ex){Console.WriteLine(ex.Message);myClientSocket.Shutdown(SocketShutdown.Both);myClientSocket.Close();break;}}}}}客户端:namespace SocketClient{class Program{private static byte[] result = new byte[1024];static void Main(string[] args){//设定服务器IP地址IPAddress ip = IPAddress.Parse("127.0.0.1");Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口Console.WriteLine("连接服务器成功");}catch{Console.WriteLine("连接服务器失败,请按回车键退出!");return;}//通过clientSocket接收数据int receiveLength = clientSocket.Receive(result);Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));//通过 clientSocket 发送数据for (int i = 0; i < 10; i++){try{Thread.Sleep(1000); //等待1秒钟string sendMessage = "client send Message Hellp" + DateTime.Now;clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));Console.WriteLine("向服务器发送消息:{0}" + sendMessage);}catch{clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();break;}}Console.WriteLine("发送完毕,按回车键退出");Console.ReadLine();}} }

C语言socket编程要怎么实现服务器可以发消息给客户端?
先要理解socket是什么? 简单的说socket是一个全双工的通信通道,即使用TCP或者UDP通信时均可以在发送消息的同时接受消息,它不区分是否是服务器。根据这个概念你的问题就很好回答。》当客户端与服务器连接后。有什么方法使服务器可以随时随地发消息给客户端?》我现在只能。客户端发个消息给服务器。服务器才能发个消息给客户端。也就是说客户端不发消息。服务器就没法发消息给客户端。》求大牛给个思路。当连接后。客户端与服务器双方可以随时随地通信!使用多线程,一个维持接受逻辑,一个维持送信逻辑,即可完成同时接受及发送。客户端及服务器端均做上述设置。而你的做法是在一个线程中执行接受与送信,因此只能按照顺序逻辑完成接收与送信。 关键点是多线程。
绑定两个端口,一个专门发送,一个专门接收

本文由 在线网速测试 整理编辑,转载请注明出处。