您的位置:首页 > 理论基础 > 计算机网络

linux网络服务器

2015-11-23 15:41 525 查看
在本次中,学习了一个简单的基于TCP/IP的服务器/客户端。在例子中,利用的是AF_INET域。在linux下,最常用就是AF_INET,AF_UNIX. AF_UNIX是linux文件系统实现的本地要借字。后面的是可以用于包括英特网在内的TCP/IP网络通信的程序。

下面来看一个简单的基于TCP/IP的程序例子:

#include <iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<sys/un.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<stdlib.h>
using namespace std;

//一个简单的客户端程序
int main()
{

int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch = 'A';

//创建一个套接字
sockfd = socket(AF_INET , SOCK_STREAM , 0);

//根据服务器的情况给套接子命名
//    address.sun_family = AF_UNIX;
//    strcpy(address.sun_path , "server_socket");
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = 7777;
len = sizeof(address);

//将我们的套接字连接到服务器的套接字
result = connect(sockfd , (struct sockaddr*)&address , len);

if(result == -1){
perror("oops: client1");
exit(1);
}

//现在可以对套接字进行读写操作啦
write(sockfd , &ch , 1);
read(sockfd , &ch , 1);
printf("char from server= %c\n" , ch);
close(sockfd);
return 0;
}


服务器端:

#include <iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<sys/un.h>
#include<unistd.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
using namespace std;

int main()
{
int server_sockfd , client_sockfd;
int server_len , client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
//删除以前的套接字,wier服务器创建一个未命名的套接字
unlink("server_socket");
server_sockfd =socket(AF_INET , SOCK_STREAM , 0);

//命令套接子:
//    server_address.sun_family = AF_UNIX;
//    strcpy(server_address.sun_path , "server_socket");
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7777;

server_len = sizeof(server_address);

bind(server_sockfd , (struct sockaddr*)&server_address , server_len);
//创建一个连接列队,开始等待客户端进行连接
listen(server_sockfd , 5);
while(1){
char ch;
printf("server waiting\n");

//接受一个连接
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd , (struct sockaddr*)&client_address , (socklen_t*)&client_len);

//对client_sockfd套接字进行读写操作
read(client_sockfd , &ch , 1);
ch++;
write(client_sockfd , &ch , 1);
close(client_sockfd);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux