網路編程伺服器
㈠ 網路編程伺服器和客戶端都接收不到數據,求大神指教,代碼如下:
php,asp,asp.net各有各的連接字元串,而且連接sqlserver,mysql,Orcale等等都不一樣,建議根據你使用的情況,具體先掌握一種,其它上手就會快一些。
資料庫應該是屬於伺服器端的一個組成部分,一般架站後資料庫在伺服器端,選用什麼資料庫需要你自己確認。
㈡ Qt Socket網路編程 伺服器端提示QIODevice::read (QTcpSocket): device not open,但是與客戶端連接成功
這是因為文件路徑不對造成的,解決方法如下:
1、首先pro文件配置:Qt網路功能需要在pro文件增加網路庫。
㈢ linux網路編程TCP伺服器 客戶端 有亂碼怎麼解決
解決辦法:
1.在客戶端n=read(socketfd,buff,1023);代碼之前加上memset(buff,0,sizeof(buff));,這是保證收到較短數據(使用TCP你不能保證每次接收的數據和發送的數據時等長的),列印也是正確的;
2.將客戶端buff[n+1]+='\0';修改為buff[n]='\0';,這是因為n是下標,已經是最後一個位置了;
3.將伺服器端buff[n+1]+='\0';修改為buff[n]='\0';,這是因為n是下標,已經是最後一個位置了,而且和第2)一樣,那個加號也要去掉,應該是筆誤吧;
4.最大的問題,將伺服器端write(connectfd,buff,1023);,你怎麼能夠保證收到1023個字元呢?也應該將while中條件移出作為WHILE中的一條語句,而且加上前面所述的memset語句,而將這里的write(connectfd,buff,1023);修改為write(connectfd,buff,strlen(buff))。
祝共同進步!
㈣ Qt網路編程 伺服器異常斷開,不能檢查到網路狀態變化
自己做心跳保活。因為異常斷開不屬於qt的處理范圍,而tcp協議棧又不存在自動處理異常斷線的功能,tcp連接在不正常關閉情況下通常都會被協議棧保持存活一段時間(具體和操作系統協議棧實現和設置有關)。qt無法獲得tcp協議棧的狀態消息,也就不會做出任何反應。所謂心跳機制請參照以下網址內容:
http://ke..com/view/4372209.htm
㈤ 在java網路編程中,客戶端/伺服器怎麼實現不同電腦之間的通信
1、首先兩台電腦和伺服器都在同一個網路中
2、相互之間可以用sokect<--->server
相互進行通信
㈥ 高性能網路編程(一):單台伺服器並發TCP連接數到底可以有多少
雖然現在的集群,分布式技術可以為我們將並發負載分擔在多台伺服器上,那我們只需要擴展出數十台電腦就可以解決問題,但是我們更希望能更大的挖掘單台伺服器的資源,先努力垂直擴展,再進行水平擴展,這樣可以有效的節省伺服器相關的開支(硬體資源、機房、運維人力、電力其實也是一筆不小的開支)。
那麼到底一台伺服器能夠支持多少TCP並發連接呢?這就是本文要討論的問題。
在linux下編寫網路伺服器程序的朋友肯定都知道每一個tcp連接都要佔一個文件描述符,一旦這個文件描述符使用完了,新的連接到來返回給我們的錯誤是
這時你需要明白操作系統對可以打開的最大文件數的限制。
1進程限制
執行 ulimit -n 輸出 1024,說明對於一個進程而言最多隻能打開1024個文件,所以你要採用此默認配置最多也就可以並發上千個TCP連接。臨時修改:ulimit -n 1000000,但是這種臨時修改只對當前登錄用戶目前的使用環境有效,系統重啟或用戶退出後就會失效。
重啟後失效的修改(不過我在CentOS 6.5下測試,重啟後未發現失效),編輯 /etc/security/limits.conf 文件, 修改後內容為:
永久修改:編輯/etc/rc.local,在其後添加如下內容:
2全局限制
執行 cat /proc/sys/fs/file-nr 輸出 9344 0 592026 ,分別為:
但在kernel 2.6版本中第二項的值總為0,這並不是一個錯誤,它實際上意味著已經分配的文件描述符無一浪費的都已經被使用了 。
我們可以把這個數值改大些,用 root 許可權修改 /etc/sysctl.conf 文件:
操作系統上埠號1024以下是系統保留的,
從1024-65535是用戶使用的。由於每個TCP連接都要佔一個埠號,所以我們最多可以有60000多個並發連接。我想有這種錯誤思路朋友不在少數吧?(其中我過去就一直這么認為)
我們來分析一下吧。
如何標識一個TCP連接:
系統用一個4四元組來唯一標識一個TCP連接:{local ip, local port,remote ip,remote port}。好吧,我們拿出《UNIX網路編程:卷一》第四章中對accept的講解來看看概念性的東西,第二個參數cliaddr代表了客戶端的ip地址和埠號。而我們作為服務端實際只使用了bind時這一個埠,說明埠號65535並不是並發量的限制。
server最大tcp連接數:
server通常固定在某個本地埠上監聽,等待client的連接請求。不考慮地址重用(unix的SO_REUSEADDR選項)的情況下,即使server端有多個ip,本地監聽埠也是獨占的,
因此server端tcp連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因此最大tcp連接為客戶端ip數×客戶端port數,對IPV4,不考慮ip地址分類等因素,
最大tcp連接數約為2的32次方(ip數)×2的16次方(port數),也就是server端單機最大tcp連接數約為2的48次方。
上面給出的結論都是理論上的單機TCP並發連接數,實際上單機並發連接數肯定要受硬體資源(內存)、網路資源(帶寬)的限制, 至少對我們的需求現在可以做到數十萬級的並發 了,你的呢?
㈦ 網路編程模型:客戶端-伺服器
網路應用隨處可見,任何時候瀏覽Web、發送E-mail信息或玩在線 游戲 ,都會使用網路應用程序。有趣的是,所有的網路應用都是基於相同的基本編程模型,有著相似的整體邏輯結構,並且依賴相同的編程介面。
每個網路應用都是基於 客戶端-伺服器 模型的。採用這個模型,一個應用是由一個伺服器進程 和 一個或多個客戶端進程組成。伺服器管理某種資源,並且通過操作這種資源來為它的客戶端提供某種服務。
如一個Web伺服器管理者一組磁碟文件,它會代表客戶端進行存儲和檢索。相似地,一個電子郵件伺服器管理著一些文件,它為客戶端進行讀和更新。
客戶端-伺服器模型中的基本操作是事務(transaction),一個客戶端-伺服器事務由以下四步組成:
需要注意的是,客戶端和伺服器是進程,而不是常提到的機器或主機。一台主機可以同時運行多個不同的客戶端和伺服器,而且一個客戶端和伺服器的事務可以在同一台或不同的主機上。無論客戶端和伺服器是怎樣映射到主機上的,客戶端-伺服器模型都是相同的。
㈧ udp網路編程伺服器回復的消息被自己接收了是什麼原因
路由器的埠號與你機器的埠號是不一樣的(你做了埠映射,對方沒有,他接收不到)可以有個中間伺服器,對方電腦先與伺服器通信(告知Ip和埠),你與伺服器通信(獲取對方的Ip和埠),也就是NAT穿透;路由端如何支持UPNP協議的話,應該不需要做埠映射;你可以看看UPNP協議
㈨ c++網路編程的伺服器和客戶端是怎麼回事
伺服器就是一個程序,時刻准備接收網路上其他計算機(或本機)上的某些程序發出的指令(字元串),然後按照指令完成某些工作。例如,你做了一個程序,准備接收字元串(sell,001A,5,3),這個串表示:銷售001A編號的商品,單價5元,賣了3個,然後把這個信息以某種格式存入文件,以便以後作為統計依據。那麼給這個伺服器發串的大概就是一個收銀台的pos機,上面運行著圖形界面,在收款員的確定按鈕按下時,發出了這筆交易串。這個pos機運行的就是客戶端程序。
伺服器程序需要時刻運行,時刻准備接收各種類型請求並處理。客戶端程序隨便一些,隨時運行一次也可以。
如果客戶端非常多時,伺服器程序就忙不過來了,就需要進程池、線程池等排隊演算法緩解壓力,也可以把各個請求以某種分類發送給不同伺服器來緩解壓力,總之方法有很多,都是伺服器開發的重點。
㈩ java中網路編程的伺服器分配房間演算法
寫個簡單點的伺服器跟客服端就行了我寫了個很簡單的,只能在一個客戶端跟一個伺服器通信,在控制台輸入下面這個是伺服器import java.io.*;
import java.net.*;
import java.util.Scanner;public class Server
{
public static void main(String[] args)
{
try {
ServerSocket server=new ServerSocket(8888);//定義客戶端的埠號
Socket client=server.accept();//定義一個Socket對象
InputStream is=client.getInputStream();//伺服器接受信息輸入流,也就是接受從伺服器段發送過來的消息
BufferedReader br=new BufferedReader(new InputStreamReader(is));//用bufferedreader包裝下輸入流
OutputStream os=client.getOutputStream();//這是用來給伺服器發送消息的輸出流
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(System.in);//從鍵盤輸入字元串
boolean flag=true;//定義一個死循環,讓伺服器不停的接受從客戶端發送來的字元串
while(flag)
{
String s=br.readLine();//s是從客戶端接受到得字元串
System.out.println(s);
String s2=scanner.nextLine();//s2是寫給客戶端的字元串
ps.println(s2); //給客戶端發送你寫的東西
}
client.close();
} catch (IOException e) {//try 跟catch你不用管,這是用來處理異常的,就是固定格式
e.printStackTrace();
}
}
} 下面是客戶端import java.io.*;
import java.net.*;
import java.util.Scanner;public class Client
{ public static void main(String[] args)
{
try
{
Socket client=new Socket("192.168.--.--",8888);//IP地址是個字元串,埠號是個整數,這個埠號要跟前面你寫的那個一樣,還有IP地址,寫你的機器的IP地址
InputStream is=client.getInputStream();//這邊的兩個流跟上面伺服器的差不多的作用
BufferedReader bf=new BufferedReader(new InputStreamReader(is));
OutputStream os=client.getOutputStream();
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(System.in);
boolean flag=true;
while(flag)//這句話可以讓客戶端不停的說話
{
String s2=scanner.nextLine();
ps.println(s2);
String s=bf.readLine();
System.out.println(s); }
client.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
} }}