- 论坛徽章:
- 0
|
网上找到的例子都是在本机情况下,客户端和服务器之间通讯。但是,我想实现非本机下通信,于是改了自动获取ip,而是写了服务器的ip,结果就一直没反应,不知道有没有大神遇到过这种情况这是本机下udp例子服务器
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUF_SIZE 30
#define PORT 9190
#define SERIP "223.3.84,129"
void error_handle(char *str)
{
printf("%s", str);
};
int main()
{
int serfd, ret;
char msg[BUF_SIZE];
int str_len;
socklen_t clnt_adr_sz;
struct sockaddr_in serv_adr, clnt_adr;
serfd = socket(PF_INET, SOCK_DGRAM, 0);
if(serfd<0){
error_handle("socket failed!\n");
return -1;
}
printf("socket succeed!\n");
memset(&serv_adr, 0, sizeof(serv_adr));
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);
// serv_adr.sin_addr.s_addr = inet_addr(SERIP);
serv_adr.sin_port = htons(PORT);
ret = bind(serfd, (struct sockaddr *)&serv_adr, sizeof(serv_adr));
if(ret<0){
error_handle("bind failed!\n");
return -1;
}
printf("bind succeed!\n");
while(1){
clnt_adr_sz = sizeof(clnt_adr);
str_len = recvfrom(serfd, msg, BUF_SIZE, 0, (struct sockaddr *)&clnt_adr, &clnt_adr_sz);
msg[str_len] = '\0';
printf("msg from client is %s\n", msg);
if(msg[0]=='q'&&msg[1]=='\n'){
printf("bye bye!!\n");
break;
}
sendto(serfd, msg, str_len, 0, (struct sockaddr *)&clnt_adr, clnt_adr_sz);
}
close(serfd);
return 0;
}
这是本机下udp例子客户端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUF_SIZE 30
#define PORT 9190
//#define SERIP "223.3.84,129"
#define SERIP "127.0.0.1"
void error_handle(char *str)
{
printf("%s", str);
};
int main()
{
int clntfd, ret;
char msg[BUF_SIZE];
int str_len;
socklen_t adr_sz;
struct sockaddr_in serv_adr, from_adr;
clntfd = socket(PF_INET, SOCK_DGRAM, 0);
if(clntfd<0){
error_handle("socket failed!\n");
return -1;
}
printf("socket succeed!\n");
memset(&serv_adr, 0, sizeof(serv_adr));
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = inet_addr(SERIP);
serv_adr.sin_port = htons(PORT);
while(1){
fputs("insert msg (q to quit):", stdout);
fgets(msg, sizeof(msg), stdin);
sendto(clntfd, msg, strlen(msg), 0, (struct sockaddr *)&serv_adr, sizeof(serv_adr));
if(!strcmp(msg, "q\n") || !strcmp(msg, "Q\n")){
break;
}
adr_sz = sizeof(from_adr);
str_len = recvfrom(clntfd, msg, BUF_SIZE, 0, (struct sockaddr *)&from_adr, &adr_sz);
msg[str_len] = '\0';
printf("msg from server is %s\n", msg);
}
close(clntfd);
return 0;
}
但是把ip改成主机ip(不是本地回环),然后通讯就不成功了
|
|