1、CSocket之UDP編程
#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1);
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sersocket=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN seraddr;
seraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
seraddr.sin_family=AF_INET;
seraddr.sin_port=htons(5000);
bind(sersocket,(SOCKADDR*)&seraddr,sizeof(SOCKADDR));
SOCKADDR clientaddr;
int len=sizeof(SOCKADDR);
char revbuf[100];
char sendbuf[100];
recvfrom(sersocket,revbuf,100,0,(SOCKADDR*)&clientaddr,&len);
printf("%s\n",revbuf);
scanf("%s",&sendbuf);
sendto(sersocket,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&clientaddr,len);
closesocket(sersocket);
WSACleanup();
}
#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1);
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sockclient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN clientaddr;
clientaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
clientaddr.sin_family=AF_INET;
clientaddr.sin_port=htons(5000);
int len=sizeof(SOCKADDR);
char revbuf[100];
char sendbuf[100];
printf("請輸入內容:\n");
while(1)
{
scanf("%s",&sendbuf);
sendto(sockclient,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&clientaddr,len);
recvfrom(sockclient,revbuf,100,0,(SOCKADDR*)&clientaddr,&len);
printf("%s\n",revbuf);
}
closesocket(sockclient);
WSACleanup();
}
大同小異,CSocket只是進行了封裝而已,原理是一樣的,編程要思路靈活才行。
2、急求C語言編寫的基於UDP的點對點的聊天程序代碼
UDP啊。。
伺服器:
socket(AF_INET, SOCK_DATEGRAM,0);
初始化地址。
bind一下。
然 recv或者 sendto。
客戶端:
一樣。socket因為UPD。直接專conect一樣。sendto就行了。
注意屬 :1.聊天 需要 IO多路復用。select 或者 poll。可以實現
2. 群聊。。其實就是一個 發送給多個。。把IP往出口 輪詢就行。
3.添加好用。登陸?。這個沒界面。後台把這些存到資料庫里。啟動的時候。
seletc出來。。
你給多少分。都沒人給你寫的。自己百度吧。。。
3、C語言 UDP文件傳輸
void ThreadReceive(PVOID param)
{
static struct sockaddr_in server; // 綁定地址
static SOCKET ListenSocket; // 等待接收數據的socket
char buf[4096];
int len = sizeof(client);
int result;
ListenSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (ListenSocket == INVALID_SOCKET)
{
perror("opening stream socket");
exit(0);
}
server.sin_family = PF_INET;
server.sin_addr.s_addr = htonl( INADDR_ANY ); // 任何地址
server.sin_port = htons(LOCAL_PORT);
if (SOCKET_ERROR == bind(ListenSocket, (struct sockaddr *)&server, sizeof(server)) )
{
printf("Error: 綁定失敗\n");
exit(1);
closesocket( ListenSocket );
}
printf("socket port %d \n", ntohs(server.sin_port));
while(TRUE)
{
//接收數據
result = recvfrom(ListenSocket, buf, sizeof(buf)-1, 0, (struct sockaddr *)&client, &len);
if ( result > 0 )
{
buf[result] = 0;
inet_ntoa(client.sin_addr), ntohs(client.sin_port));
}
}
closesocket(ListenSocket);
}
4、能否給我一個用純C編寫的UDP發送和接收的程序
UDP的,你看下
1.伺服器端實現
程序在收到客戶端發送來的消息後,給客戶端發送消息,提示客戶端收到了該消息
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int sock, length, fromlen, n;
struct sockaddr_in server;
struct sockaddr_in from;
char buf[1024];
//要求執行是輸入埠信息
if (argc!= 2) {
printf( "Usage: %s port_num\n",argv[0]);
return 1;
}
//創建通信所需的套接字,並與地址和埠信息幫定
sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0){
perror("cannot create communicating socket");
return 1;
}
length = sizeof(server);
bzero(&server,length);
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(atoi(argv[1]));
if (bind(sock,(struct sockaddr *)&server,length)<0){
perror("cannot bind the socket");
close(sock);
return 1;
}
fromlen = sizeof(struct sockaddr_in);
//讀取客戶端發送來的信息,顯示後,發回相關信息給客戶端
while (1) {
n = recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr *)&from,&fromlen);
if (n < 0) {
perror("cannot receive date from client");
break;
}
write(STDOUT_FILENO,"server: Received a datagram: ",29);
write(STDOUT_FILENO,buf,n);
n = sendto(sock,"send message to client\n",22,
0,(struct sockaddr *)&from,fromlen);
if (n < 0) {
perror("cannot send data to the client");
break;
}
}
close(sock);
return 0;
}
2.客戶端實現
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int sock, length, n;
struct sockaddr_in server, from;
struct hostent *hp;
char buffer[256];
//判斷輸入參數是否符合要求
if (argc != 3) {
printf("Usage: %s server_ip port_num\n",argv[0]);
return 1;
}
//創建通信套接字
sock= socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
perror("cannot create communicating socket");
return 1;
}
server.sin_family = AF_INET;
hp = gethostbyname(argv[1]);
if (hp==0) {
perror("cannot get the server ip address");
return 1;
}
bcopy((char *)hp->h_addr,
(char *)&server.sin_addr,
hp->h_length);
server.sin_port = htons(atoi(argv[2]));
length=sizeof(struct sockaddr_in);
printf("(client) enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
//發送數據給指定伺服器
n=sendto(sock,buffer,strlen(buffer),0,&server,length);
if (n < 0){
perror("cannot get message from the client");
return 1;
}
//從伺服器中接受數據
bzero(buffer,256);
n = recvfrom(sock,buffer,256,0,&from, &length);
if (n < 0) {
perror("cannot send message to the server");
return 1;
}
printf("client got message : %s\n",buffer);
close(sock);
return 0;
}
5、C語言 UDP socket 簡單客戶端 編程,急
提一下,你那個地址不好用,換成了127.0.0.1,埠可以用,完全按照要求寫的,編譯沒錯誤,調試通過:
gcc server.c -o server
gcc client.c -o client
打開2個控制台:一個運行 ./server 另一個運行 ./client
server.c:
========================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#define BUFFERSIZE 1024
typedef struct sockaddr SA;
int main(void)
{
char buf[BUFFERSIZE];
struct sockaddr_in addr_s;
struct sockaddr_in addr_c;
int sockfd;
socklen_t length;
int i;
if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
{
perror("socket fail");
return -1;
}
memset(&addr_s,0,sizeof(addr_s));
addr_s.sin_family = AF_INET;
addr_s.sin_addr.s_addr = inet_addr("127.0.0.1");
addr_s.sin_port = htons(31180);
if(bind(sockfd,(SA *)&addr_s,sizeof(addr_s)) == -1)
{
perror("bind fail");
return -1;
}
length = sizeof(addr_c);
memset(buf,'\0',sizeof(buf));
if(recvfrom(sockfd,buf,sizeof(buf),0
,(SA *)&addr_c,&length) == -1)
{
perror("recvfrom fail");
}
printf("recvfrom client:%s\n",buf);
sendto(sockfd,buf,sizeof(buf),0,(SA *)&addr_c,sizeof(addr_c));
close(sockfd);
}
====================================
client.c:
====================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#define BUFFERSIZE 1024
typedef struct sockaddr SA;
int main(void)
{
int sockfd;
char buf[BUFFERSIZE];
struct sockaddr_in addr_s;
if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
{
perror("socket fail");
return -1;
}
memset(&addr_s,0,sizeof(addr_s));
addr_s.sin_family = AF_INET;
addr_s.sin_addr.s_addr = inet_addr("127.0.0.1");
addr_s.sin_port = htons(31180);
memset(buf,'\0',sizeof(buf));
sprintf(buf,"abcde");
if(sendto(sockfd,buf,sizeof(buf)
,0,(SA *)&addr_s,sizeof(addr_s)) < 0)
{
perror("sendto fail");
}
memset(buf,'\0',sizeof(buf));
recvfrom(sockfd,buf,sizeof(buf),0,NULL,NULL);
printf("recvfrom server:%s\n",buf);
close(sockfd);
}
6、linux下udp通信的客戶端、伺服器端的c語言程序 用int argc,char *argv[] 能夠輸入ip和埠號
占個位置,晚上回去給你發,我做的是C語言的socket通信的小程序,我是先創建了一專個守護進屬程,我的守護進程,做的任務就是你所說的中轉程序的工作,通信的客戶端,先把消息發給守護進程,再由守護進程轉發給另一個客戶端。
守護進程:
守護進程,也就是通常說的Daemon進程,是Linux中的後台服務進程。它是一個生存期較長的進,通常獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。守護進程常常在系統引導裝入時啟動,在系統關閉時終止。Linux系統有很多守護進程,大多數服務都是通過守護進程實現的,同時,守護進程還能完成許多系統任務,例如,作業規劃進程crond、列印進程lqd等(這里的結尾字母d就是Daemon的意思)。
由於在Linux中,每一個系統與用戶進行交流的界面稱為終端,每一個從此終端開始運行的進程都會依附於這個終端,這個終端就稱為這些進程的控制終端,當控制終端被關閉時,相應的進程都會自動關閉。但是守護進程卻能夠突破這種限制,它從被執行開始運轉,直到整個系統關閉時才退出。如果想讓某個進程不因為用戶或終端或其他地變化而受到影響,那麼就必須把這個進程變成一個守護進程。
7、linux c語言實現,udp協議
UDP協議全稱是用戶數據報協議,在網路中它與TCP協議一樣用於處理數據包,是一專種無連接的協議。在OSI模型中,在屬第四層--傳輸層,處於IP協議的上一層。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數據的網路應用。包括網路視頻會議系統在內的眾多的客戶/伺服器模式的網路應用都需要使用UDP協議。UDP協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但是即使是在今天UDP仍然不失為一項非常實用和可行的網路傳輸層協議。
8、急求C語言編寫的基於UDP的點對點的聊天程序代碼
一個來款區域網聊天源代碼源
本程序設計分為伺服器應用程序及客戶機應用程序部分,採用Socket套接字型檔網路編程。(UDP)和(TCP/IP)相結合的連接方式,及解決了數據傳輸的時效性又能保證數據在傳輸的過程中不會丟失。另外程序採用多個線程來避免程序阻塞。具體設計思路及部分代碼如下:
程序設計目的:首先就是完成課設任務啦(大二課設內容)其他目的:
1:練習使用套接字進行網路編程。
2:練習使用自定義消息。
3:練習多線程方面的編程思想。
4:練習使用各種控制項。
伺服器與客戶端通信邏輯圖
.
.
.
略.
具體的圖可以到我的空間的相冊去看。
9、有沒有windows下c語言實現udp協議的代碼
Windows下C語言的Socket編程例子(TCP和UDP)
一。 <TCP>
server端:
復制代碼
1 #include "stdafx.h"
2 #include <stdio.h>
3 #include <winsock2.h>
4
5 #pragma comment(lib,"ws2_32.lib")
6
7 int main(int argc, char* argv[])
8 {
9 //初始化WSA
10 WORD sockVersion = MAKEWORD(2,2);
11 WSADATA wsaData;
12 if(WSAStartup(sockVersion, &wsaData)!=0)
13 {
14 return 0;
15 }
16
17 //創建套接字
18 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
19 if(slisten == INVALID_SOCKET)
20 {
21 printf("socket error !");
22 return 0;
23 }
24
25 //綁定IP和埠
26 sockaddr_in sin;
27 sin.sin_family = AF_INET;
28 sin.sin_port = htons(8888);
29 sin.sin_addr.S_un.S_addr = INADDR_ANY;
30 if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
31 {
32 printf("bind error !");
33 }
34
35 //開始監聽
36 if(listen(slisten, 5) == SOCKET_ERROR)
37 {
38 printf("listen error !");
39 return 0;
40 }
41
42 //循環接收數據
43 SOCKET sClient;
44 sockaddr_in remoteAddr;
45 int nAddrlen = sizeof(remoteAddr);
46 char revData[255];
47 while (true)
48 {
49 printf("等待連接...
");
50 sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
51 if(sClient == INVALID_SOCKET)
52 {
53 printf("accept error !");
54 continue;
55 }
56 printf("接受到一個連接:%s
", inet_ntoa(remoteAddr.sin_addr));
57
58 //接收數據
59 int ret = recv(sClient, revData, 255, 0);
60 if(ret > 0)
61 {
62 revData[ret] = 0x00;
63 printf(revData);
64 }
65
66 //發送數據
67 char * sendData = "你好,TCP客戶端!
";
68 send(sClient, sendData, strlen(sendData), 0);
69 closesocket(sClient);
70 }
71
72 closesocket(slisten);
73 WSACleanup();
74 return 0;
75 }
復制代碼
client端:
復制代碼
1 #include "stdafx.h"
2 #include <WINSOCK2.H>
3 #include <STDIO.H>
4
5 #pragma comment(lib,"ws2_32.lib")
6
7
8 int main(int argc, char* argv[])
9 {
10 WORD sockVersion = MAKEWORD(2,2);
11 WSADATA data;
12 if(WSAStartup(sockVersion, &data) != 0)
13 {
14 return 0;
15 }
16
17 SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
18 if(sclient == INVALID_SOCKET)
19 {
20 printf("invalid socket !");
21 return 0;
22 }
23
24 sockaddr_in serAddr;
25 serAddr.sin_family = AF_INET;
26 serAddr.sin_port = htons(8888);
27 serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
28 if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
29 {
30 printf("connect error !");
31 closesocket(sclient);
32 return 0;
33 }
34 char * sendData = "你好,TCP服務端,我是客戶端!
";
35 send(sclient, sendData, strlen(sendData), 0);
36
37 char recData[255];
38 int ret = recv(sclient, recData, 255, 0);
39 if(ret > 0)
40 {
41 recData[ret] = 0x00;
42 printf(recData);
43 }
44 closesocket(sclient);
45 WSACleanup();
46 return 0;
47 }
復制代碼
二. <UDP>
SERVER 端
復制代碼
1 #include "stdafx.h"
2 #include <stdio.h>
3 #include <winsock2.h>
4
5 #pragma comment(lib, "ws2_32.lib")
6
7 int main(int argc, char* argv[])
8 {
9 WSADATA wsaData;
10 WORD sockVersion = MAKEWORD(2,2);
11 if(WSAStartup(sockVersion, &wsaData) != 0)
12 {
13 return 0;
14 }
15
16 SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
17 if(serSocket == INVALID_SOCKET)
18 {
19 printf("socket error !");
20 return 0;
21 }
22
23 sockaddr_in serAddr;
24 serAddr.sin_family = AF_INET;
25 serAddr.sin_port = htons(8888);
26 serAddr.sin_addr.S_un.S_addr = INADDR_ANY;
27 if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
28 {
29 printf("bind error !");
30 closesocket(serSocket);
31 return 0;
32 }
33
34 sockaddr_in remoteAddr;
35 int nAddrLen = sizeof(remoteAddr);
36 while (true)
37 {
38 char recvData[255];
39 int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);
40 if (ret > 0)
41 {
42 recvData[ret] = 0x00;
43 printf("接受到一個連接:%s
", inet_ntoa(remoteAddr.sin_addr));
44 printf(recvData);
45 }
46
47 char * sendData = "一個來自服務端的UDP數據包
";
48 sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen);
49
50 }
51 closesocket(serSocket);
52 WSACleanup();
53 return 0;
54 }
復制代碼
CLIENT 端
復制代碼
1 #include "stdafx.h"
2 #include <stdio.h>
3 #include <winsock2.h>
4
5 #pragma comment(lib, "ws2_32.lib")
6
7 int main(int argc, char* argv[])
8 {
9 WORD socketVersion = MAKEWORD(2,2);
10 WSADATA wsaData;
11 if(WSAStartup(socketVersion, &wsaData) != 0)
12 {
13 return 0;
14 }
15 SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
16
17 sockaddr_in sin;
18 sin.sin_family = AF_INET;
19 sin.sin_port = htons(8888);
20 sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
21 int len = sizeof(sin);
22
23 char * sendData = "來自客戶端的數據包.
";
24 sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);
25
26 char recvData[255];
27 int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);
28 if(ret > 0)
29 {
30 recvData[ret] = 0x00;
31 printf(recvData);
32 }
33
34 closesocket(sclient);
35 WSACleanup();
36 return 0;
37 }
10、C語言發送UDP數據的!
不明白你要幹嘛,發表了幾個陳述句,貼了段code...