【发布时间】:2011-04-26 14:29:58
【问题描述】:
我刚开始学习套接字编程,发现它很有趣。 目前我正在同一台计算机上制作服务器和客户端,因此我可以将ip地址作为环回地址,127.0.0.1一切似乎都很好!
但现在我正在考虑拥有两台计算机并做这件事.. 我有以下问题
- 假设一台计算机是服务器,另一台是客户端。现在,服务器代码是否应该驻留在服务器计算机上,客户端代码应该驻留在客户端上??李>
- 在服务器代码中,当我们为
bind()提供ip地址时,应该是系统的ip地址我们可以通过ipconfig找到还是应该仍然是环回地址? - 在客户端代码中,我猜目的地的IP地址应该是服务器计算机的IP地址吧??
- 最后也是最重要的事情,如何连接两台计算机??
我附上了我开始使用的简单服务器和客户端消息传递代码。请指导我完成我需要进行的更改..
服务器代码
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#define MYPORT 3500
int main()
{
int sockfd;
int clientfd;
int bytes_read;
char buf[100];
int struct_size;
struct sockaddr_in my_addr;
struct sockaddr_in con_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
my_addr.sin_zero[8]='\0';
bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));
listen(sockfd,5);
struct_size = sizeof(con_addr);
clientfd = accept(sockfd, (struct sockaddr*)&con_addr, &struct_size);
bytes_read = read(clientfd, buf, 100);
buf[bytes_read] = '\0';
printf("Message from client:%d is %s \n",clientfd, buf);
close(sockfd);
close(clientfd);
}
客户代码
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<fcntl.h>
#include<string.h>
#include<stdio.h>
#define DESTPORT 3500
int main()
{
struct sockaddr_in dest_addr;
int sockfd = socket(AF_INET,SOCK_STREAM,0);
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(DESTPORT);
dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
dest_addr.sin_zero[8]='\0';
connect(sockfd,(struct sockaddr*)&dest_addr, sizeof(struct sockaddr));
char msg[100];
printf("Enter you message: ");
gets(&msg);
int w = write(sockfd, msg, strlen(msg));
close(sockfd);
printf("Client Dying.....\n");
return 0;
}
【问题讨论】: