當前位置:首頁 » 編程軟體 » socket編程代碼

socket編程代碼

發布時間: 2023-01-07 18:10:48

① C++ SOCKET編程,如何監聽多個埠,比如監聽兩個埠,關鍵代碼該怎麼寫,求教求教,求代碼!

#include<stdio.h>
#include<Winsock2.h>
#include<process.h>

#pragmacomment(lib,"Ws2_32.lib")

unsignedint__stdcalllisteningThread(void*param)
{
SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons((int)param);

intret=bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
ret=listen(sockSrv,5);
SOCKADDR_INaddrClient;
intlen=sizeof(SOCKADDR);
while(1)
{
SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
charsendBuf[]="HelloWorld!";

send(sockConn,sendBuf,strlen(sendBuf)+1,0);
charrecvBuf[50];
recv(sockConn,recvBuf,50,0);
printf("%s ",recvBuf);
closesocket(sockConn);
}
return0;
}
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;

wVersionRequested=MAKEWORD(2,2);

err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0){
return;
}

_beginthreadex(NULL,0,listeningThread,(void*)8120,0,NULL);
_beginthreadex(NULL,0,listeningThread,(void*)8121,0,NULL);
Sleep(INFINITE);
}

這個是windows平台的,創建兩個線程,分別處理兩個監聽埠,埠通過參數傳進去

② 求C++,socket聊天程序的代碼,最好是實現了兩個客戶端之間經由伺服器的信息互發,聊天功能要完整些

#include <stdio.h>
#include <winsock2.h>
#define MAX_SIZE 200
void main(void) {
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}

SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));
SOCKADDR addrClient;
char recvBuffer[MAX_SIZE];
memset(recvBuffer, 0, sizeof(recvBuffer));
int len = sizeof(SOCKADDR);
recvfrom(sockSrv, recvBuffer, sizeof(recvBuffer), 0, (SOCKADDR *)&addrClient, &len);

printf("%s\n", recvBuffer);
closesocket(sockSrv);
}
#include <stdio.h>
#include <winsock2.h>
void main(void) {
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}

/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}

/* The WinSock DLL is acceptable. Proceed. */

SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
SOCKADDR_IN addrClient;
addrClient.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrClient.sin_family = AF_INET;
addrClient.sin_port = htons(6000);
sendto(sockClient, "你若此生若只如一瞬", strlen("你若此生若只如一瞬"), 0, (SOCKADDR *)&addrClient, sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}

③ 6.Twisted UDP Socket 編程示例

示例:客戶端每隔10秒向服務端報送設備使用情況,具體數據如下:

數據以文本進行傳輸,傳輸格式:Key:Value,中間用冒號分隔。服務端只做數據的原樣顯示並回復"OK!"

由於 UDP 沒有連接的概念,所以大多數情況下,採用 UDP Socket 實現的應用都是由設備採集數據上報到服務上來運行的。

雖然對於 UDP 來說沒有服務端和客戶端的概念,但在實際項目開發中,我們一般還是要區分服務端和客戶端的。對於 UDP 服務端來說,其實代碼很簡單,因為其主要任務就是接收數據,然後對數據進行處理。

先來編寫代碼框架:

代碼中,主要實現的是 datagramReceived 事件,一般在該事件的代碼中就是我們的業務邏輯,示例代碼如下:

客戶端代碼相對比服務端要復雜一點,主要是客戶端需要執行定時任務,這樣的話,我們需要設計一個線程來執行該定時任務,由於線程中需要發送數據到服務端,所以,在線程中需要設計一個屬性指向客戶端的 Protocol。線程的框架代碼如下:

客戶端框架代碼:

線程主要通過 Protocol 發送數據,實現代碼如下:

客戶端 Protocol 代碼實現如下:

在 Protocol 啟動時連接到伺服器,這樣就可以形成 Connected UDP,相對於 UDP 來說,數據的傳輸可靠性有所提高,同時,在代碼中發送數據也不需要寫服務端的地址。

服務端:

客戶端:

④ c# socket編程,如何在有路由器的區域網中,連接另一台主機

下面是示常式序的簡單步驟說明

伺服器端:

第一步:用指定的埠號和伺服器的ip建立一個EndPoint對像;

第二步:建立一個Socket對像;

第三步:用socket對像的Bind()方法綁定EndPoint;

第四步:用socket對像的Listen()方法開始監聽;

第五步:接受到客戶端的連接,用socket對像的Accept()方法創建新的socket對像用於和請求的客戶端進行通信;

第六步:通信結束後一定記得關閉socket;

代碼:

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace server
{
class Program
{
static void Main(string[] args)
{
int port = 2000;
string host = "127.0.0.1";

/**////創建終結點(EndPoint)
IPAddress ip = IPAddress.Parse(host);//把ip地址字元串轉換為IPAddress類型的實例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的埠和ip初始化IPEndPoint類的新實例

/**////創建socket並開始監聽
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//創建一個socket對像,如果用udp協議,則要用SocketType.Dgram類型的套接字
s.Bind(ipe);//綁定EndPoint對像(2000埠和ip地址)
s.Listen(0);//開始監聽
Console.WriteLine("等待客戶端連接");

/**////接受到client連接,為此連接建立新的socket,並接受信息
Socket temp = s.Accept();//為新建連接創建新的socket
Console.WriteLine("建立連接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//從客戶端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

/**////給client端返回信息
Console.WriteLine("server get message:{0}", recvStr);//把客戶端傳來的信息顯示出來
string sendStr = "ok!Client send message successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);//返回信息給客戶端
temp.Close();
s.Close();
Console.ReadLine();
}

}
}

客戶端:

第一步:用指定的埠號和伺服器的ip建立一個EndPoint對像;

第二步:建立一個Socket對像;

第三步:用socket對像的Connect()方法以上面建立的EndPoint對像做為參數,向伺服器發出連接請求;

第四步:如果連接成功,就用socket對像的Send()方法向伺服器發送信息;

第五步:用socket對像的Receive()方法接受伺服器發來的信息 ;

第六步:通信結束後一定記得關閉socket;

代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Client
{
class Program
{
static void Main(string[] args)
{
try
{
int port = 2000;
string host = "127.0.0.1";
/**////創建終結點EndPoint
IPAddress ip = IPAddress.Parse(host);
//IPAddress ipp = new IPAddress("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和埠轉化為IPEndpoint實例

/**////創建socket並連接到伺服器
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//創建Socket
Console.WriteLine("Conneting…");
c.Connect(ipe);//連接到伺服器

/**////向伺服器發送信息
string sendStr = "hello!This is a socket test";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字元串編碼為位元組
Console.WriteLine("Send Message");
c.Send(bs, bs.Length, 0);//發送信息

/**////接受從伺服器返回的信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//從伺服器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("client get message:{0}", recvStr);//顯示伺服器返回信息
/**////一定記著用完socket後要關閉
c.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("argumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException:{0}", e);
}
Console.WriteLine("Press Enter to Exit");
}
}
}

⑤ Java的Socket編程

要通信首先要建立socket鏈接。
1 ab客戶端與服務端建立socket鏈接
2 a客戶端發送消息到服務端
3 服務端收到消息後,發送到指定的b客戶端
4 b客戶端處理來自服務端的消息

php的socket編程

socket_bind($socket,'127.0.0.1',9000);

伺服器端綁定IP指的是127.0.0.1,就是伺服器本機,監聽9000埠

⑦ 一個關於socket編程的問題,我用vs寫了一個很簡單的客戶端和一個伺服器的程序

伺服器的地址指定伺服器工作的IP地址
客戶端的地址指定所連接的伺服器的IP地址,因此:
兩個都填寫伺服器那台計算機的IP地址即可,埠號保持一致!

⑧ c# socket編程

private void button2_Click(object sender, EventArgs e)
if (s.Connected == true)
try
string abc = textBox3.Text;
s.Send(Encoding.ASCII.GetBytes(abc));
MesageBox.Show("向伺服器發送:" + abc);
catcMessageBox.Show("發送失敗");
接收:
System.Timers.Timer aTimer = new System.Timers.Timer();
byte[] res = new byte[1024];
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIll
aTimer.Elapsed += new ElapsedEventHandler(socket_rev); //定時事件的方法
aimer.Interval = 100;
private void socket_rev(object sender, EventArgs e)
int receiveLength = s.Receive(res, res.Length, SocketFlags.None);
if (receiveLength > 0)
textBox4.Text = Encoding.ASCII.GetString(res, 0, receiveLength);
string abc = "HaveReceive";
s.Send(Encoding.ASCII.GetBytes(abc));
(8)socket編程代碼擴展閱讀:C#Socket非同步通訊學習
思路
1、Socket分為面向連接協議(如TCP)和無連接協議(如UDP)
2、Socket通信分為同步操作模式和非同步操作模式,同步模式在建立連接之前/收到消息之前會阻塞當前進程,非同步模式不會阻塞當前進程
綜合以上兩點,考慮到體驗,當然是選擇非同步Socket啦,另外,這里使用的是面向連接的協議,那麼實現思路大致如下:
1、創建Socket對象
2、綁定IP和埠
3、偵聽連接
4、開始一個非同步操作來接收一個接入的連接請求
5、處理接入的請求
6、向客戶端發送消息

linux socket程序 求代碼運行結果

ret=write(socket_fd,send_buff,strlen(send_buff));

應該改為:

ret=write(new_socket_fd,send_buff,strlen(send_buff));

accept成功後,所有的操作,都要針對新獲得的句柄來操作,不然會引發錯誤,造成主程序異常退出。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:113
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712