1樓:_夢幻陽光
#include#include
#include
#include
#include
#include
#include
#define serverport 5555#define backlog 10
#define maxlen 1024
int main();
struct sockaddr_in my_addr;
struct sockaddr_in cli_addr;
int iret;
/*建立socke通訊*/
if((sockfd = socket(af_inet,sock_stream,0)) == -1)
printf("socket success\n");
my_addr.sin_family=af_inet; my_addr.sin_port=htons(serverport);
my_addr.sin_addr.s_addr=inaddr_any;
memset(my_addr.sin_zero,0,8);
/*繫結socket埠*/
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1)
printf("bind success\n");
/*監聽埠*/
if(listen(sockfd,backlog) == -1)
printf("listren success\n");
while(1)
printf("accept success\n");
printf("receive a connection form %s\n",inet_ntoa(cli_addr.sin_addr));
/*fork程序,子程序處理接收的資訊*/
iret=fork();
if(iret < 0)
/*fork返回0,為子程序*/
else if(iret == 0)
printf("recvlen[%d]\n",recvlen);
printf("recvmsg:\n%s\n",recvbuf);
/*向客戶端傳送內容*/ if(send(client_fd,recvbuf,recvlen,0) == -1)
printf("sendmsg:\n%s\n",recvbuf);
close(client_fd);
exit(0);
} /*父程序,返回子程序pid*/
else }
close(sockfd);
exit(0);}
2樓:冰是沉默的水
好厲害的樣子,完成了可以給我**麼!我也想看看!
3樓:
可以給我一份嗎?謝謝,[email protected]
c語言socket程式設計要怎麼實現伺服器可以發訊息給客戶端?
4樓:love添飯
先要理解
來socket是什麼?
簡單的說socket是一
自個全雙工的通訊通道,bai
即使用dutcp或者udp通訊時均可zhi以在傳送訊息的同時接受消dao
息,它不區分是否是伺服器。
根據這個概念你的問題就很好回答。
》當客戶端與伺服器連線後。有什麼方法使伺服器可以隨時隨地發訊息給客戶端?
》我現在只能。客戶端發個訊息給伺服器。伺服器才能發個訊息給客戶端。也就是說客戶端不發訊息。伺服器就沒法發訊息給客戶端。
》求大牛給個思路。當連線後。客戶端與伺服器雙方可以隨時隨地通訊!
使用多執行緒,一個維持接受邏輯,一個維持送信邏輯,即可完成同時接受及傳送。
客戶端及伺服器端均做上述設定。
而你的做法是在一個執行緒中執行接受與送信,因此只能按照順序邏輯完成接收與送信。
關鍵點是多執行緒。
5樓:匿名使用者
繫結兩個埠,一個專門傳送,一個專門接收
如何用c語言編寫一個簡單的聊天室程式
6樓:頂起石頭的小草
你好!是dos下的聊天程式嗎
c語言socket伺服器怎麼給客戶端發訊息
7樓:匿名使用者
socket 伺服器給指定的客戶端發訊息該怎麼處理(tcp)(c語言)
多個客戶端之間進行通訊,通過伺服器**的形式,現在客戶端1請求向客戶端2傳送訊息,先把訊息傳送到伺服器,伺服器怎麼才能把訊息**到客戶端2而不是**給客戶端3或者他自己。
8樓:山成褒庚
最好的方法是:每一客戶端用唯一的id來標示,就像qq號一樣,
在客戶端連線伺服器,傳送自己的id,
然後和相應產生的socket進行繫結,
一個客戶端向另一個客戶端傳送資訊時,要求在資料包裡包含對方的id號。可以定義一個型別下列的資料結構對資料包進行封裝:
type
struct
_sdata
sdata,
*psdata;
9樓:騎富貴容嫻
你的檔案中的問題
//會阻塞程序,直到有客戶端連線上來為止
//既然是直到有客戶端連線上,那麼就要弄明白哪個是與客戶端連線的套接字//
sockclient就是與客戶端連線的套接字sockclient
=accept(sockserver,
(sockaddr*)&addrclient,&len);
//接收並列印客戶端資料
recv(sockclient,
recvbuf,
100,
0);printf("%s\n",
recvbuf);
//所以此處,應該把sockserver改為sockclientsend(/*sockserver*/sockclient,sendbuf,
100,
0);ps:伺服器客戶端通訊,是要保持伺服器與客戶端的連線。
而不能這樣立即關閉,如果設定不對,立即關閉,緩衝區的資料是會丟失的。那客戶端也就不會再收到資料了。
你可以加sleep(10000);來測是通訊過程//關閉socket
closesocket
(sockclient);
c語言socket程式設計,伺服器和一個客戶端連線時,伺服器能正常收到資訊,2個以上就出現bug了 100
10樓:
設定監聽socket的listen呢?
執行緒有自己的私有棧,即區域性變數
編寫一個簡單的tcp通訊程式。伺服器傳送“你好我是伺服器”,客戶端接收該資訊並顯示在螢幕上。用j**a寫
採用tcp協議,使用socket程式設計,編寫程式完成客戶端傳送訊息給服務端,服務端接到訊息後,再發
11樓:樹大沒風
服務端**:
/*server.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#define port 4321
#define buffer_size 1024
#define max_que_conn_nm 5
int main()
printf("socket id = %d\n",sockfd);
/*設定sockaddr_in 結構體中相關引數*/
server_sockaddr.sin_family = af_inet;
server_sockaddr.sin_port = htons(port);
server_sockaddr.sin_addr.s_addr = inaddr_any;
bzero(&(server_sockaddr.sin_zero), 8);
int i = 1;/* 使得重複使用本地地址與套接字進行繫結 */
setsockopt(sockfd, sol_socket, so_reuseaddr, &i, sizeof(i));
/*繫結函式bind*/
if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1)
printf("bind success!\n");
/*呼叫listen函式*/
if (listen(sockfd, max_que_conn_nm) == -1)
printf("listening....\n");
/*呼叫accept函式,等待客戶端的連線*/
if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1)
/*呼叫recv函式接收客戶端的請求*/
memset(buf , 0, sizeof(buf));
if ((recvbytes = recv(client_fd, buf, buffer_size, 0)) == -1)
printf("received a message: %s\n", buf);
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
close(sockfd);
exit(0);
} 客戶端:
/*client.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define port 4321
#define buffer_size 1024
int main(int argc, char *ar**)
/*地址解析函式*/
if ((host = gethostbyname(ar**[1])) == null)
memset(buf, 0, sizeof(buf));
sprintf(buf, "%s", ar**[2]);
/*建立socket*/
if ((sockfd = socket(af_inet,sock_stream,0)) == -1)
/*設定sockaddr_in 結構體中相關引數*/
serv_addr.sin_family = af_inet;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);
/*呼叫connect函式主動發起對伺服器端的連線*/
if(connect(sockfd,(struct sockaddr *)&serv_addr, sizeof(struct sockaddr))== -1)
/*傳送訊息給伺服器端*/
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
if ((recvbytes = recv(sockfd, buf, buffer_size, 0)) == -1)
close(sockfd);
exit(0);}
win32程式建立執行緒用c語言庫的 beginthread還
beginthread就是把createthread寫成了乙個函式,createthread是windows的api beginthread是c語言的內建函式.若說使用哪個,都是可以使用的,看個人愛好,還有結束執行緒的不同。一般來說使用 beginthread安全結束執行緒簡單些 建議使用 begi...
用C語言編簡單的數學計算程式要求輸入題目數
include include include void main int a,b,i,op,r,c 0 c表示答對題目數,r記錄回答結果 int n,s printf 您希望出多少道題目 n scanf d n s n while n srand time 0 a rand 10 1 b rand...
怎樣用C語言編寫DOS下的中斷服務程式
keys.cpp 按鍵表索引發 首先建立key table作為按鍵表,然後根據按鍵掃描碼改變key table中的狀態,這樣key table中所有對應的索引按鍵即為需要的組合鍵。以下程式僅對上 下 左 右四個游標鍵做了組合按鍵的處理。本程式在borland c 3.1 中除錯通過。include ...