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

网络编程(2)—— 基于linux系统的socket客户端编程步骤

2016-02-09 19:42 741 查看
socket客户端编程的基本步骤:

1.1 创建套接字

int socket(int domain,int type,int protocol);

domain--协议簇,常用的有AF_INET(基于IPV4的Internet协议),AF_INET6(基于IPv6的Internet协议),AF_LOCAL(Unix本地通信协议)

type--传输类型,常用的有SOCK_STREAM(面向连接的可靠的带连接的传输方式,如TCP),SOCK_DGRAM(面向消息的不可靠的雾连接的传输方式,如UDP)

protocal--指定协议,在前面两个参数确定的情况下,若存在多种协议满足条件,用来指定某个协议,通常为0

返回值--socket文件操作符

1.2 连接服务器端

int connect(int sockfd,const struct sockaddr* addr,socklen_t addrlen);

sockfd--socket操作符

addr--包含了服务器端地址信息的sockaddr类型的结构体指针

addrlen--上述结构体的大小

返回值--返回0表示连接成功,返回-1表示连接失败

1.3 读取服务器端数据

ssize_t read(int fd,void* buf,size_t count);

fd--socket文件操作符

buf--存放读取的数据的buffer

count--buffer的长度

返回值--返回实际督导的字节数

1.4 关闭socket

close(int sockfd);

sockfd--socket文件操作符

示例代码clnt.c:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<string.h>
#include<sys/socket.h>
void error_handling(char* message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}
int main(int argc,char* argv[])
{
int sock;
struct sockaddr_in serv_addr;
char message[30];
int str_len;
sock=socket(PF_INET,SOCK_STREAM,0);
if(sock==-1)
error_handling("socket error");

memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
serv_addr.sin_port=htons(atoi(argv[2]));

if(connect(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr))==-1)
error_handling("connect error");

str_len=read(sock,message,sizeof(message));
if(str_len==-1)
error_handling("read error");

printf("the message from server: %s\n",message);

close(sock);
return 0;
}


         结合本专栏第一篇博文《网络编程(1)—— 基于linux系统的socket服务器端编程步骤》,分别编译服务端代码和客户端代码,就可以实现服务端和客户端的通信了。

         编译serv.c并执行程序,采用9190端口:

hyman@hyman-VirtualBox:~/projects/NetDevelopment$ gcc serv.c -o serv
hyman@hyman-VirtualBox:~/projects/NetDevelopment$ ./serv 9190


         编译clnt.c并执行程序,连接环回地址和9190端口:

hyman@hyman-VirtualBox:~/projects/NetDevelopment$ gcc clnt.c -o clnt
hyman@hyman-VirtualBox:~/projects/NetDevelopment$ ./clnt 127.0.0.1 9190
the message from server: hello world!


Github位置:

https://github.com/HymanLiuTS/NetDevelopment


克隆本项目:

git clone git@github.com:HymanLiuTS/NetDevelopment.git

获取本文源代码:

git checkout NL02
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: