我写了这个程序:
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int socket_desc;
struct sockaddr_in adress;
int addrlen;
int new_socket;
int bufsize = 1024;
char *you_sent = "You sent: ";
int main() {
char *buffer = malloc(bufsize);
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
adress.sin_family = AF_INET;
adress.sin_addr.s_addr = INADDR_ANY;
adress.sin_port = htons(7000);
bind(socket_desc, (struct sockaddr *)&adress, sizeof(adress));
listen(socket_desc, 3);
addrlen = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *)&adress, &addrlen);
while(recv(new_socket,buffer,bufsize,0))
{
printf("I recieved: %s", buffer);
send(new_socket, you_sent, strlen(you_sent), 0);
send(new_socket, buffer, strlen(buffer), 0);
memset(buffer, '\0', sizeof(buffer));
}
}
我可以使用telnet连接到服务器。并将内容写入应用程序并从应用程序中接收数据。 但我无法理解如何使用另一个c程序连接到此程序,并从该程序发送和接收数据。 我试过这个:
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int socket_desc;
struct sockaddr_in adress;
int addrlen;
int new_socket;
char *message_to_send = "Hello world!";
int main() {
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
adress.sin_family = AF_INET;
adress.sin_addr.s_addr = INADDR_ANY;
adress.sin_port = htons(7000);
bind(socket_desc, (struct sockaddr *)&adress, sizeof(adress));
listen(socket_desc, 3);
addrlen = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *)&adress, &addrlen);
send(new_socket, message_to_send, strlen(message_to_send), 0);
}
答案 0 :(得分:5)
服务器就像交换机板上的电话运营商。那个人做了以下事情:
bind
到一个号码)listen
)accept
)另一端的人只想打电话给那个人。 (即connect
)。当需要打电话时,此人只需要打电话。因此没有绑定到手机或不得不听它响。
我希望这个比喻有助于你理解。
PS:socket
部分是墙上的电话插座。
答案 1 :(得分:4)
序列如下:
服务器端:
socket
系统调用bind
系统调用; listen
系统调用(这将启用积压队列); accept
系统调用接受传入连接
accept
函数将返回表示新连接的新文件描述符。您将使用此文件与其他主机发送/接收数据,而原始文件描述符(来自socket
)将用于新的传入连接。客户端:
socket
; connect
的连接。Here您可能会找到一些其他资源。