1、C語言socket編程要怎麼實現伺服器可以發消息給客戶端?
先要理解socket是什麼?
簡單的說socket是一個全雙工的通信通道,
即使用TCP或者UDP通信時均可以在發送消息的同時接受消息,
它不區分是否是伺服器。
根據這個概念你的問題就很好回答。
》當客戶端與伺服器連接後。有什麼方法使伺服器可以隨時隨地發消息給客戶端?
》我現在只能。客戶端發個消息給伺服器。伺服器才能發個消息給客戶端。也就是說客戶端不發消息。伺服器就沒法發消息給客戶端。
》求大牛給個思路。當連接後。客戶端與伺服器雙方可以隨時隨地通信!
使用多線程,一個維持接受邏輯,一個維持送信邏輯,即可完成同時接受及發送。
客戶端及伺服器端均做上述設置。
而你的做法是在一個線程中執行接受與送信,因此只能按照順序邏輯完成接收與送信。
關鍵點是多線程。
2、C語言 socket編程 TFTP伺服器與客戶端的實現
想要抄快速入門socket編程,先找嵌入式linux方面的書籍來看,看關於文件操作部分,然後看基於tcp udp的socket編程實例,拿別人代碼跑一跑,就能理解了,往後想了解更多,可以往tcpip協議方面看也能往Linux網路編程方面看,對於tftp協議,基於udp來設計,只需要看看別人怎麼實現協議的代碼,然後用結構體等數據結構將協議的各個段封裝進去就行
3、Socket編程如何搭建一個外網可以訪問的伺服器
搭建外網訪問,首先你要有一台外網可訪問的伺服器,有以下幾種方法可以實現。
一、購買外網伺服器。由於伺服器端使用JAVA語言開發,所以外網伺服器操作系統可以是Linux或Windows,這個需要你花錢購買。如果只是測試,你可以選擇購買阿里雲的雲伺服器,非常便宜。
二、還有一種方法就是你通過花生殼之類的軟體進行映射你的網路,但花生殼對長城寬頻之類的網路支持不是特別好,如果需要很好的支持,那也需要花錢購買。
三、如果你是通過路由器上網,並且可以操作路由器許可權且使用的是電信或者是聯通的網路,那可以直接在路由器裡面做埠映射,這個你可以百度一下,有很多文章講的非常清楚,這里篇幅限制,就不貼了。
四、如果你是直接通過貓上網且使用電信或聯通寬頻,那可以直接使用本機外網IP訪問你的程序。
以上四種方法中,最穩定的還是購買外網伺服器,其它都會有各種問題,你可以選擇其中適合你的一種方法。希望能幫助到你
4、C++網路編程(socket)我要寫一個伺服器端程序和一個客戶端程序
呵呵,當讓可以了。
1、首先我說一下他們的關系:
一個解決方案(*.sln)中可以包含多個項目(*.vcxproj);
這些項目可以是互不相關的,也可以是相關的;
2、下面說如何將你的兩個項目放在同一個解決方案里
你將一個的項目(B)拷貝到另外一個項目中(A)(其中文件夾A和B中含有*.vcxproj);
你有A.vcxproj和B.vcxproj兩個項目,他們分別為
文件夾A(其中含有A.vcxproj) 和 文件夾B(其中含有B.vcxproj)
解決方案(C.sln)和文件夾A和B在同一目錄下。
然後打開對應的解決方案,添加項目,將剛才的B項目添加即可;
3、設置啟動項目。
5、java socket編程 伺服器端 信息轉發
以前抄寫的,伺服器和客戶端的源代碼:
http://hi.baidu.com/cliff77/blog/item/d819338f0162cae8f11f3660.html
http://hi.baidu.com/cliff77/blog/item/64055262040cbbdbe6113a63.html
6、SOCKET編程實現伺服器端的步驟是什麼?
Java版本
1.編寫伺服器端,實例化ServerSocket對象,這里要定義ip和埠,實例化Socket,從版ServerSocket對象中accept() 獲取,這里要涉及權到流,輸入輸出流在Socket中獲取
2.編寫客戶端,實例化Socket對象,ip,埠,流,在Socket中獲取
如果想要具體代碼,就留言,有空發給你
7、socket編程伺服器端接收數據
//服務端:
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
Thread mythread ;
Socket socket;
// 清理所有正在使用的資源。
protected override void Dispose( bool disposing )
{
try
{
socket.Close();//釋放資源
mythread.Abort ( ) ;//中止線程
}
catch{ }
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
public static IPAddress GetServerIP()
{
IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());
return ieh.AddressList[0];
}
private void BeginListen()
{
IPAddress ServerIp=GetServerIP();
IPEndPoint iep=new IPEndPoint(ServerIp,8000);
socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
byte[] byteMessage=new byte[100];
this.label1.Text=iep.ToString();
socket.Bind(iep);
// do
while(true)
{
try
{
socket.Listen(5);
Socket newSocket=socket.Accept();
newSocket.Receive(byteMessage);
string sTime = DateTime.Now.ToShortTimeString ( ) ;
string msg=sTime+":"+"Message from:";
msg+=newSocket.RemoteEndPoint.ToString()+Encoding.Default.GetString(byteMessage);
this.listBox1.Items.Add(msg);
}
catch(SocketException ex)
{
this.label1.Text+=ex.ToString();
}
} // while(byteMessage!=null);
}
//開始監聽
private void button1_Click(object sender, System.EventArgs e)
{
try
{
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
}
catch(System.Exception er)
{
MessageBox.Show(er.Message,"完成",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
}
//客戶端:
using System.Net;
using System.Net.Sockets;
using System.Text;
private void button1_Click(object sender, System.EventArgs e)
{
BeginSend();
}
private void BeginSend()
{
string ip=this.txtip.Text;
string port=this.txtport.Text;
IPAddress serverIp=IPAddress.Parse(ip);
int serverPort=Convert.ToInt32(port);
IPEndPoint iep=new IPEndPoint(serverIp,serverPort);
byte[] byteMessage;
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(iep);
byteMessage=Encoding.ASCII.GetBytes(textBox1.Text);
socket.Send(byteMessage);
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
//基於TCP協議的發送和接收端
//TCP協議的接收端
using System.Net.Sockets ; //使用到TcpListen類
using System.Threading ; //使用到線程
using System.IO ; //使用到StreamReader類
int port = 8000; //定義偵聽埠號
private Thread thThreadRead; //創建線程,用以偵聽埠號,接收信息
private TcpListener tlTcpListen; //偵聽埠號
private bool blistener = true; //設定標示位,判斷偵聽狀態
private NetworkStream nsStream; //創建接收的基本數據流
private StreamReader srRead;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ListBox listBox1; //從網路基礎數據流中讀取數據
private TcpClient tcClient ;
private void Listen ( )
{
try
{
tlTcpListen = new TcpListener ( port ) ; //以8000埠號來初始化TcpListener實例
tlTcpListen.Start ( ) ; //開始監聽
statusBar1.Text = "正在監聽" ;
tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通過TCP連接請求
nsStream = tcClient.GetStream ( ) ; //獲取用以發送、接收數據的網路基礎數據流
srRead=new StreamReader(nsStream);//以得到的網路基礎數據流來初始化StreamReader實例
statusBar1.Text = "已經連接!";
while( blistener ) //循環偵聽
{
string sMessage = srRead.ReadLine();//從網路基礎數據流中讀取一行數據
if ( sMessage == "STOP" ) //判斷是否為斷開TCP連接控制碼
{
tlTcpListen.Stop(); //關閉偵聽
nsStream.Close(); //釋放資源
srRead.Close();
statusBar1.Text = "連接已經關閉!" ;
thThreadRead.Abort(); //中止線程
return;
}
string sTime = DateTime.Now.ToShortTimeString ( ) ; //獲取接收數據時的時間
listBox1.Items.Add ( sTime + " " + sMessage ) ;
}
}
catch ( System.Security.SecurityException )
{
MessageBox.Show ( "偵聽失敗!" , "錯誤" ) ;
}
}
//開始監聽
private void button1_Click(object sender, System.EventArgs e)
{
thThreadRead = new Thread ( new ThreadStart ( Listen ) );
thThreadRead.Start();//啟動線程
button1.Enabled=false;
}
// 清理所有正在使用的資源。
protected override void Dispose( bool disposing )
{
try
{
tlTcpListen.Stop(); //關閉偵聽
nsStream.Close();
srRead.Close();//釋放資源
thThreadRead.Abort();//中止線程
}
catch{}
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
//TCP協議的發送端
using System.Net.Sockets; //使用到TcpListen類
using System.Threading; //使用到線程
using System.IO; //使用到StreamWriter類
using System.Net; //使用IPAddress類、IPHostEntry類等
private StreamWriter swWriter; //用以向網路基礎數據流傳送數據
private NetworkStream nsStream; //創建發送數據的網路基礎數據流
private TcpClient tcpClient;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2; //通過它實現向遠程主機提出TCP連接申請
private bool tcpConnect = false; //定義標識符,用以表示TCP連接是否建立
//連接
private void button1_Click(object sender, System.EventArgs e)
{
IPAddress ipRemote ;
try
{
ipRemote = IPAddress.Parse ( textBox1.Text ) ;
}
catch //判斷給定的IP地址的合法性
{
MessageBox.Show ( "輸入的IP地址不合法!" , "錯誤提示!" ) ;
return ;
}
IPHostEntry ipHost ;
try
{
ipHost = Dns.Resolve ( textBox1.Text ) ;
}
catch //判斷IP地址對應主機是否在線
{
MessageBox.Show ("遠程主機不在線!" , "錯誤提示!" ) ;
return ;
}
string sHostName = ipHost.HostName ;
try
{
TcpClient tcpClient = new TcpClient(sHostName,8000);//對遠程主機的8000埠提出TCP連接申請
nsStream = tcpClient.GetStream();//通過申請,並獲取傳送數據的網路基礎數據流
swWriter = new StreamWriter(nsStream);//使用獲取的網路基礎數據流來初始化StreamWriter實例
button1.Enabled = false ;
button2.Enabled = true ;
tcpConnect = true ;
statusBar1.Text = "已經連接!" ;
}
catch
{
MessageBox.Show ( "無法和遠程主機8000埠建立連接!" , "錯誤提示!" ) ;
return ;
}
}
//發送
private void button2_Click(object sender, System.EventArgs e)
{
if (textBox2.Text !="")
{
swWriter.WriteLine(textBox2.Text);//刷新當前數據流中的數據
swWriter.Flush();
}
else
{
MessageBox.Show("發送信息不能為空!","錯誤提示!");
}
}
// 清理所有正在使用的資源。
protected override void Dispose( bool disposing )
{
if ( tcpConnect )
{
swWriter.WriteLine ( "STOP" ) ; //發送控制碼
swWriter.Flush (); //刷新當前數據流中的數據
nsStream.Close (); //清除資源
swWriter.Close ();
}
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
8、java socket編程中伺服器指的是什麼? 客戶端指的又是什麼?
/*服務端*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
第四步,編寫伺服器端的主體代碼,如下所示。
public class ServerCode
{
// 設置埠號
public static int portNo = 3333;
public static void main(String[] args) throws IOException
{
ServerSocket s = new ServerSocket(portNo);
System.out.println("The Server is start: " + s);
// 阻塞,直到有客戶端連接
Socket socket = s.accept();
try
{
System.out.println("Accept the Client: " + socket);
//設置IO句柄
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
while (true)
{
String str = in.readLine();
if (str.equals("byebye"))
{
break;
}
System.out.println("In Server reveived the info: " + str);
out.println(str);
}
}
finally
{
System.out.println("close the Server socket and the io.");
socket.close();
s.close();
}
}
}
/*客戶端*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
第二,編寫客戶端的主體代碼,如下所示:
public class ClientCode
{
static String clientName = "Mike";
//埠號
public static int portNo = 3333;
public static void main(String[] args) throws IOException
{
// 設置連接地址類,連接本地
InetAddress addr = InetAddress.getByName("localhost");
//要對應伺服器端的3333埠號
Socket socket = new Socket(addr, portNo);
try
{
System.out.println("socket = " + socket);
// 設置IO句柄
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
PrintWrite out = new PrintWriter(BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println("Hello Server,I am " + clientName);
String str = in.readLine();
System.out.println(str);
out.println("byebye");
}
finally
{
System.out.println("close the Client socket and the io.");
socket.close();
}
}
}
9、用socket編程實現伺服器和客戶端的通信
這個不是很難的
,你隨便找本VC的書基本上都有的,如果沒找到發郵件給我:[email protected]
10、使用socket網路編程技術,創建伺服器端和客戶端。
沒有100%完全和你復說的一制樣的。。
只有類似的,然後自己改改成自己的,
因為,無緣無故,誰也不會沒事做為了你寫一個這代碼。。
只有相似的,然後改成自己的。。。
希望有用
kuaipan.cn/file/id_61615948720784723.htm