Linux socket编程
陆续开始复习一下网络知识,把以前的东西全部捡回去
服务端:
/*
* File: main.cpp
* Author: ziqiao
*
* Created on 2011年4月15日, 上午11:06
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333 /* Server listeing prot */
#define BACKLOG 10 /* maximum servering size */
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int sock_fd; // listening socket
int client_fd; // client socket
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
size_t sin_size;
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
perror("socket creatation error");
exit(1);
}
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(SERVPORT);
my_addr.sin_addr.s_addr = htons(INADDR_ANY);
if (bind(sock_fd, (struct sockaddr *)&my_addr, sizeof (my_addr)) == -1) { // 监听端口
perror("bind error");
cout << errno << endl;
exit(1);
}
if (listen(sock_fd, BACKLOG) == -1) { // 监听
perror("listen error");
exit(1);
}
while (1) {
sin_size = sizeof(struct sockaddr_in);
if ((client_fd = accept(sock_fd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) {
perror("accept error");
continue;
}
cout << "received a connection from " << inet_ntoa(remote_addr.sin_addr) << endl;
if (!fork()) { // create subprocess to handle
if (send(client_fd, "Hello, you are connectedn", 26, 0) == -1)
perror("send error");
close(client_fd);
exit(0);
}
}
close(sock_fd);
return 0;
}
客户端:
/*
* File: main.cpp
* Author: ziqiao
*
* Created on 2011年4月15日, 下午5:02
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333 /* Server listeing prot */
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int sock_fd; // socket
struct sockaddr_in remote_addr;
int len;
char buf[1024];
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
perror("socket creatation error");
exit(1);
}
bzero(&remote_addr, sizeof(remote_addr));
remote_addr.sin_family = AF_INET;
remote_addr.sin_port = htons(SERVPORT);
remote_addr.sin_addr.s_addr = htons(0xFF000000);
if ((connect(sock_fd, (struct sockaddr*)&remote_addr, sizeof(remote_addr))) == -1) {
perror("connect error");
exit(1);
}
if ((len = recv(sock_fd, buf, 1024, 0)) == -1) {
perror("recv error");
exit(1);
}
buf [len] = 0;
cout << "Received: " << buf << endl;
close(sock_fd);
return 0;
}
![Creative Commons License](http://i.creativecommons.org/l/by/2.5/cn/88x31.png)
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。