導航:首頁 > 配伺服器 > 如何通過客戶端做伺服器端

如何通過客戶端做伺服器端

發布時間:2022-11-27 12:26:47

❶ 如何在客戶端上建立一個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

閱讀全文

與如何通過客戶端做伺服器端相關的資料

熱點內容
演算法怎麼測試數據 瀏覽:724
三星冰箱壓縮機價格表 瀏覽:993
微信視頻分裂源碼 瀏覽:47
安卓手機打開屏幕時間怎麼設置 瀏覽:379
php不讓網頁直接打開 瀏覽:728
為什麼程序員的網速總是那麼快 瀏覽:954
單片機一個led閃爍 瀏覽:473
pdf顯示空白 瀏覽:449
基岩版伺服器怎麼添加常載入區域 瀏覽:651
蘋果雲服務伺服器地址 瀏覽:162
blue引擎gm命令如何修改 瀏覽:49
編程高手箴言pdf 瀏覽:702
那狗n1用的app叫什麼名字 瀏覽:336
python定義浮點數 瀏覽:604
酷安加密門禁卡 瀏覽:101
為什麼蘋果比安卓拍攝效果好 瀏覽:341
android網路中文亂碼 瀏覽:656
演算法就是程序這句話對不 瀏覽:930
數學建模蟻群演算法 瀏覽:110
雲伺服器如何選擇區域 瀏覽:374