c/s架构是最为基础的网络构件。 各个平台,各个语言中,socket tcp网络编程最为基本的就是
服务器:
socket() //创建socket
bind() // 绑定地址
listen() // 监听端口
accept() // 接受请求
send()
recv()
客户端:
socket() // 创建socket
connect() // 连接到服务器
send() // 发送消息
recv() //接收消息
代码如下
#include "../sock.h"
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <time.h>
#define BUFSIZE 1024
#define LISTENQ 5
int main(int argc, char *argv[])
{
int listen_sockfd, client_sockfd;
int len;
struct sockaddr_in client_addr, server_addr;
int sin_size;
time_t ticks;
char write_buf[BUFSIZE] = { 0 };
char read_buf[BUFSIZE] = { 0 };
listen_sockfd = Socket(AF_INET, SOCK_STREAM, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(8000);
Bind(listen_sockfd, (struct sockaddr *) &server_addr,
sizeof(server_addr));
Listen(listen_sockfd, LISTENQ);
while (1) {
len = sizeof(client_addr);
client_sockfd =
Accept(listen_sockfd, (struct sockaddr *) &client_addr, &len);
inet_ntop(AF_INET, &client_addr.sin_addr, read_buf,
sizeof(read_buf));
fprintf(stdout, "connect from %s:\t%d\n", read_buf,
htons(client_addr.sin_port));
memset(read_buf, 0, BUFSIZE);
if ((len = recv(client_sockfd, read_buf, sizeof(read_buf), 0)) > 0) {
read_buf[len] = '\0';
fprintf(stdout, "%s\n", read_buf);
fflush(stdout);
}
ticks = time(NULL);
snprintf(write_buf, sizeof(write_buf), "%s", ctime(&ticks));
send(client_sockfd, write_buf, strlen(write_buf), 0);
close(client_sockfd);
}
close(listen_sockfd);
return 0;
}
客户端:
#include <stdio.h>
#include "../sock.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define BUFSIZE 1024
int main()
{
int server_sock;
int port = 80;
struct sockaddr_in server_addr;
char write_buf[BUFSIZE] = { 0 };
char read_buf[BUFSIZE] = { 0 };
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(8000);
server_sock = Socket(AF_INET, SOCK_STREAM, 0);
Connect(server_sock, (struct sockaddr *) &server_addr,
sizeof(struct sockaddr));
sprintf(write_buf, "hello");
send(server_sock, write_buf, strlen(write_buf), 0);
recv(server_sock, read_buf, BUFSIZE, 0);
printf("%s\n", read_buf);
fflush(stdout);
close(server_sock);
return 0;
}