❶ 如何在客戶端上建立一個Socket與伺服器端連接,包括連接的函數
進入mysql,創建一個新用戶xuys:
格式:grant 許可權 on 資料庫名.表名 用戶@登錄主機 identified by "用戶密碼";
grant select,update,insert,delete on *.* to [email protected] 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步。
❷ C# 怎樣才能實現客戶端通過伺服器端連接資料庫伺服器
可以處理的,步驟為:
1.客戶端與伺服器連(用Socket通訊)
2.客戶端向處伺服器發送SQL語句,如搜索一個表的數據
3.伺服器接到請求,執行SQL語句返回一個DataTable
4.伺服器將這個DataTable進行序列化、並且壓縮
5.伺服器將【序列化和壓縮】後的byte[] msg數組傳給客戶端
6.客戶端收到byte[] msg數組先進行解壓縮、和反序列化為DataTable
7.再將DataTable通過DataSet和SqlDataAdapter.Update(Table)存在SQL中
下面我只給一些關鍵的代碼,我有實現過的
第一步.客戶端==》連接伺服器並通訊,主要是發送SQL給伺服器返回一個DataTable表
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.IO.Compression;
namespace Client
{
public partial class FormClient : Form
{
DataTable dt;
public FormClient()
{
InitializeComponent();
}
private void ClientTest(string str)
{
Socket client;
String returnData;
byte[] buf = new byte[9991024]; //此處可能有些問題
//IPAddress local = IPAddress.Parse("116.25.83.127");
IPAddress local = IPAddress.Parse("127.0.0.1");//可改為遠程IP地址
IPEndPoint iep = new IPEndPoint(local, 6060);
try
{
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(iep);
}
catch (SocketException)
{
Console.WriteLine("無法連接到伺服器!");
return ;
}
//輸入exit,可以斷開與伺服器的連接
if (str == "")
{
return;
}
//發送SQL語句給伺服器
client.Send(Encoding.Unicode.GetBytes(str));
//得到實際收到的位元組總數
Int32 rec = client.Receive(buf);
Console.WriteLine(Encoding.ASCII.GetString(buf, 0, rec));
//接收伺服器返回的數據
returnData = System.Text.Encoding.Unicode.GetString(buf,0,rec);
//將returnData解壓縮後,再反序列化轉成DataTable dt = DeserializerDataTable(Decompress(returnData));
Console.WriteLine("斷開與伺服器的連接......");
client.Close();
dataGridView1.DataSource = dt;
}
//將DataTable表反序列化
private DataTable DeserializerDataTable(string pXml)
{
StringReader strReader = new StringReader(pXml);
XmlReader xmlReader = XmlReader.Create(strReader);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
DataTable dt = serializer.Deserialize(xmlReader) as DataTable;
return dt; }
//給伺服器傳SQL語句
private void buttonSearch_Click(object sender, EventArgs e)
{
string Sql = String.Format("Select top {0} * From Part Where CorpCode_='PT'", textBox1.Text.Trim()); ;
ClientTest(Sql);
}
#region 壓縮和解壓縮
public string Compress(string str)
{
byte[] buffer = Encoding.Unicode.GetBytes(str);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}
//解壓縮
public string Decompress(string compressedText)
{
byte[] gzBuffer = Convert.FromBase64String(compressedText);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return Encoding.Unicode.GetString(buffer);
}
}
#endregion
}
}
第二步.伺服器收到SQL語句執行,並回傳一個表給客戶端
伺服器接到請求,執行SQL語句返回一個DataTable
伺服器將這個DataTable進行序列化、並且壓縮
伺服器將【序列化和壓縮】後的byte[] msg數組傳給客戶端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets; //可以使用套接字
using System.Threading; //可以使用多線程
using System.Data.SqlClient;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.IO.Compression;
namespace AppServer
{
public partial class FormApp : Form
{
public FormApp()
{
InitializeComponent();
}
private void FormApp_Load(object sender, EventArgs e)
{
// AppService instance = new AppService();
}
private void buttonStartService_Click(object sender, EventArgs e)
{
AppService();
}
private Socket server;
private Socket client;
private void AppService()
{
/*
//本機IP
string name = Dns.GetHostName();
IPHostEntry host = Dns.GetHostByName(name);
IPAddress id= host.AddressList[0];
* */
//IPAddress local = IPAddress.Parse("192.168.0.100");
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 6060);
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 將套接字與本地終結點綁定
server.Bind(iep);
//在本地13000埠號上進行監聽
server.Listen(10);
while (true)
{
// 得到包含客戶端信息的套接字
client = server.Accept();
//創建消息服務線程對象ClientService方法委託給線程
Thread newthread = new Thread(new ThreadStart(ClientService));
// 啟動消息服務線程
newthread.Start();
}
}
private Int32 i;
private void ClientService()
{
Socket s = client;
String data = null;
String returnData = null;
byte[] bytes = new byte[1024];
while ((i = s.Receive(bytes)) != 0)
{
//接收客戶端的SQL
data = System.Text.Encoding.Unicode.GetString(bytes, 0, i);
//將接到的String 執行SQL返回表
DBAccess obj = new DBAccess(); //專門傳給SQL的類相當於DBHELP
DataTable dt = obj.FillData(data, "TEST", 1);//執行SQL返回表
//將返回的表轉為String,並將returnData壓縮
returnData = obj.Compress(obj.SerializeDataTableXml(dt));
byte[] msg = System.Text.Encoding.Unicode.GetBytes(returnData);
// 發送數據表給客戶端 s.Send(msg);
if ((i = s.Receive(bytes)) == 0)
continue;
}
//關閉套接字
s.Close();
}
}
//DBAccess的部份代碼
class DBAccess
{
#region DataTable序列化與反序列化
public string SerializeDataTableXml(DataTable dt)
{
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
serializer.Serialize(writer, dt);
writer.Close();
return sb.ToString(); }
public DataTable DeserializerDataTable(string pXml)
{
StringReader strReader = new StringReader(pXml);
XmlReader xmlReader = XmlReader.Create(strReader);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
DataTable dt = serializer.Deserialize(xmlReader) as DataTable;
return dt; }
#endregion
#region 壓縮和解壓縮
public string Compress(string str)
{
byte[] buffer = Encoding.Unicode.GetBytes(str);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}
public string Decompress(string compressedText)
{
byte[] gzBuffer = Convert.FromBase64String(compressedText);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return Encoding.Unicode.GetString(buffer);
}
}
#endregion
}
第三步.調用DataSet和SqlDataAdapter.Update(Table)存在SQL中,這個是傳入一個DataGridView ,可在客戶端中使用保存(部份代碼,沒有連接SQL資料庫的)
#region 公共保存DataGridView
public bool DataGridViewSave(DataTable table,string tableName,string CorpCode)
{
string Sql = String.Format("Select Top 0 * From {0} Where CorpCode_='{1}' ", tableName, CorpCode);
SqlDataAdapter sda = new SqlDataAdapter(this.CreateCommand(Sql, null, 1));
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.Update(table);
this.Close();
return true;
}
#endregion
❸ 游戲沒有服務端怎麼拿客戶端玩
游戲沒有服務端拿客戶端玩的方法是根據客戶端做一個模擬器。有人民幣請人來做,完全可以實現,或者有技術可以自己做。客戶端(Client)或稱為用戶端,是指與伺服器相對應,為客戶提供本地服務的程序。除了一些只在本地運行的應用程序之外,一般安裝在普通的客戶機上,需要與服務端互相配合運行。
❹ 客戶端可以同時作為伺服器端嗎
餓,是可以的設A、B是客戶,S是伺服器,A和S連接後,S可以拿到A的IP地址,同樣B和S連接後,S也可以拿到B的IP地址,S將B的ip地址信息轉發給A,在B上開一個ServerSocket監聽,然後讓A通過B的IP地址連接B就可以了!
❺ 只有客戶端 怎麼寫服務端
右擊桌面左下角的「開始」按鈕,從其右鍵菜單中選擇「控制面板」項以打開,如圖所示:
待打開「控制面板」窗口後,將「查看方式」設置為「大圖標」,從工具列表中找到「程序和功能」按鈕點擊進入。
從打開的「程序或功能」界面中,點擊左上角的「打開或關閉Windows功能」按鈕,如圖所示:
此時將彈出「Windows功能」窗口,從列表中選中「Telnet客戶端」項,點擊「確定」按鈕。
接下來「Windows功能」窗口將顯示「正在應用所做的更改」界面,耐心等待一會,待更改操作完成後,點擊「關閉」按鈕即可。
步驟閱讀
6
最後再次使用「telnet」命令登陸遠程伺服器時,將直接進入登陸界面,如圖所示,此時表明「Telnet」命令正常運行。
❻ java中如何實現從客戶端發送文件到伺服器端
BufferedInputStream bis = new BufferedInputStream( new FileInputStream("文件路徑"));
byte[] buf = new byte[1024];
int len = 0;
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream);
while((len = bis.read(buf))!=-1){
bos.write(buf,0,len);
bos.flush();
}
思路是這樣的了。。。具體你自己寫吧。
❼ C# winform 如何實現客戶端和伺服器端
這個很簡單,普通的資料庫操作就可以,只不過連接的時候設置連接的IP
資料庫安裝在伺服器上,假定IP為11.10.10.2
客戶端和伺服器端程序全部使用 server=11.10.10.2;uid=sa;pwd=;database=資料庫名;這樣的連接字元串進行連接資料庫操作。
這樣不管是客戶端還是伺服器端,操作的都是同一個資料庫,只不過是操作界面不同而已(就是許可權)。
❽ 談談在雲計算、雲伺服器部署的背景下,如何做好客戶端與伺服器之間前後端信息
在雲計算、雲伺服器部署的背景下,客戶端和伺服器之間的信息結構的內容。
MySQL的客戶端/伺服器架構:
mysql客戶端服務端場景:
a.啟動MySQL伺服器程序 b.啟動MySQL客戶端程序並連接到伺服器程序。 c.在客戶端程序中輸入一些命令語句作為請求發送到伺服器程序,伺服器程序收到這些請求後,會根據請求的內容來操作具體的數據並向客戶端返回操作。
RabbitMQ是AMQP的實現成果,所以在研究RabbitMQ之前,不如先看看協議本身.1Overview概述1.1GoalsofThisDocument文檔目標本文檔定義了網路協議AMQP,客戶端可以使用該協議與消息中間件伺服器進行通信.我們面向的是在本領域有一定經驗的技術人員,我們會提供充分的用於客戶端瀏覽器和web伺服器之間的通訊,實現數據信息在客戶端和web伺服器之間的加密傳輸,可以防止數據信息的泄露。為提高安全性,建議替換成自己的證書,並及時更新證書,保證證書的有效性。
❾ 如何實現客戶端與伺服器的交互
C/S模式和B/S各有其有點也各有其缺點,B/S模式在開發中需要考慮數據如何從客戶端提交到伺服器端,數據又如何返回到客戶端,這些是B/S模式所特有的,在去年之前,開發B/S模式的程序,我都是利用form來交互數據,當我看到XML之後,發現XML是個好冬冬,有很多優點,有好的東西當然不能獨享啦,想當年為了實現XML交互數據,幾乎把網路翻了個遍。咚,一塊磚頭上來了。呵呵,廢話少說,下面我們就進入正題。
B/S模式分為伺服器端和客戶端,客戶端接受用戶的請求,客戶端向應用服務提出請求,應用服務從資料庫服務中獲得數據,應用服務將數據進行計算並將結果提交給客戶端,客戶端將結果呈現給用戶。這樣,我們就看到了數據從客戶到伺服器,經過伺服器的處理再返回到客戶端,由客戶端軟體(如IE)顯示結果。
(以ASP教本語言為例,其它的語言一樣哈。)
1.Form方式
Form方式是最基本的向伺服器提交數據的方式。
test.asp文件代碼:
<%@ Language=VBScript %>
<%
Response.Expires=-1
Response.CharSet="UTF-8"
Session.CodePage="65001"
%>
<form name="frmTest" id="frmTest" action="test.asp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if