十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
socket函數(shù)啊 先$sock=socket_create(....) 再socket_bind($sock,$address,$port)
銅官網(wǎng)站建設公司創(chuàng)新互聯(lián),銅官網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為銅官超過千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設要多少錢,請找那個售后服務好的銅官做網(wǎng)站的公司定做!
要看你是同步還是異步了,異步的話,每次發(fā)送都要走三次握手,再計算總時間
你要快就同步,同時發(fā)1000臺計算機,不用等每一次的返回是否正確.
php是腳本語言,估計無法實現(xiàn)你這個愿望。
以前的高手是通過CGI來實現(xiàn)的,就是因為CGI是應用程序,安全性不好,所以后來才流行PHP這類腳本語言的(就好像以前電腦上都是administrator,現(xiàn)在都是用戶自己的賬戶了一樣)。
1.確認執(zhí)行該PHP腳本的系統(tǒng)具備修改服務器IP/子網(wǎng)掩碼/網(wǎng)關的權限.
2.確認你的PHP運行執(zhí)行shell_exec的函數(shù),這個函數(shù)在安全模式下是被屏蔽的.
3.確認你在shell_exec里面執(zhí)行的系統(tǒng)命令行是正確的.
簡單的例子:
$
vi
test.php
#!/usr/bin/php
?php
$rsl
=
shell_exec("fconfig
eth0
192.168.1.2
netmask
255.255.255.0");
//改ip和子網(wǎng)掩碼的.
$rsl2
=
shell_exec("route
add
default
gw
192.168.1.1");
//設置網(wǎng)關
echo
$rsl."\n".$rsl2;//看看返回的結果.
?
$
chmod
755
test.php
--
給腳本增加執(zhí)行的權限
$
./test.php
參考其他函數(shù):
exec()
system()
等等.
windows下怎么做?
我又沒錢買windows我怎么知道!
這個是做不到的,因為在b.php這個頁面看來,a.php和你都是客戶端,客戶端是沒有能力偽造自己的ip的
換個思路的話,你可以在你本機部署個a.php,或者你的機器開代理,讓a.php用代理的方式訪問你的機器,然后再向b.php發(fā)起請求(我只能說出這個思路,但具體我實現(xiàn)不了,因為不會配置代理)
接收指定IP的數(shù)據(jù)包,其他IP都要過濾吧,那就用防火墻來搞吧
使用的是client段的獲取方式,用client的可以指定IP,代碼大概如下
public void SendMessage()
{
ASCII = Encoding.ASCII;
// 構造用于發(fā)送的 字節(jié)緩沖.
Byte[] sendBytes = ASCII.GetBytes(SEND_MESSAGE);
// 構造用于接收的 字節(jié)緩沖.
Byte[] recvBytes = new Byte[256];
// IP地址.
IPAddress localAddr = IPAddress.Parse("192.168.19.81");
// 接入點.
IPEndPoint ephost = new IPEndPoint(localAddr, PORT);
// 第一個參數(shù):AddressFamily = 指定 Socket 類的實例可以使用的尋址方案。
// Unspecified 未指定地址族。
// InterNetwork IP 版本 4 的地址。
// InterNetworkV6 IP 版本 6 的地址。
//
// 第二個參數(shù):SocketType = 指定 Socket 類的實例表示的套接字類型。
// Stream 一個套接字類型,支持可靠、雙向、基于連接的字節(jié)流,而不重復數(shù)據(jù),也不保留邊界。
// 此類型的 Socket 與單個對方主機通信,并且在通信開始之前需要建立遠程主機連接。
// 此套接字類型使用傳輸控制協(xié)議 (Tcp),AddressFamily 可以是 InterNetwork,也可以是 InterNetworkV6。
//
// 第三個參數(shù):ProtocolType = 指定 Socket 類支持的協(xié)議。
// Tcp 傳輸控制協(xié)議 (TCP)。
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// 嘗試連接主機.
s.Connect(ephost);
//Console.WriteLine("向服務器發(fā)送到了:{0}", SEND_MESSAGE);
// 向主機發(fā)送數(shù)據(jù).
// s.Send(sendBytes, sendBytes.Length, SocketFlags.None);
// 接收服務器的應答.
Int32 bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);
StringBuilder buff = new StringBuilder();
// while (bytes 0)
// {
// 將緩沖的字節(jié)數(shù)組,裝換為字符串.
// String str = ASCII.GetString(recvBytes, 0, bytes);
String str = "";
for (int i = 0; i recvBytes.Length; i++)
{
str = str + recvBytes[i];
}
int iCount = 0;
iCount = int.Parse(str.Substring(13, 6)) ;
// 加入字符串緩存
buff.Append(str);
// 再次接受,看看后面還有沒有數(shù)據(jù).
//bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);
// }
textBox1.Text = iCount.ToString();
}
catch (Exception ex)
{
MessageBox.Show("連接/發(fā)送/接收過程中,發(fā)生了錯誤!");
MessageBox.Show(ex.Message);
//Console.WriteLine("連接/發(fā)送/接收過程中,發(fā)生了錯誤!");
//Console.WriteLine(ex.Message);
//Console.WriteLine(ex.StackTrace);
}
finally
{
s.Close();
}