linux网络编程中tcp
来源:互联网 发布:大学生消费水平的数据 编辑:程序博客网 时间:2024/05/20 07:17
相互通信的网络程序通常可以分为客户端和服务器端两部分。简单的C/S服务模式客户端和服务器采用的是一对一的关系。下面以tcp为例讲解网络通信过程,三次握手这些详细过程就省略了。
相关函数,结构:
int socket(int domain, int type, int protocol);
– 函数返回Socket描述符,返回-1表示出错
– domain参数只能取AF_INET, protocol参数一般取0
数据结构:sockaddr_in
struct sockaddr_in {
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[ 8]; /* Same size as
struct sockaddr */
};
int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
bind函数返回-1表示出错,最常见的错误是该端口已经被其他程序绑定。
连接某个Server
int connect(int sockfd, struct sockaddr *servaddr, int addrlen);
•servaddr是事先填写好的结构,Server的IP和端口都在该数据结构中指定。
监听服务器端口:
int listen(int sockfd, int queue_length);
响应连接请求:
int accept(int sockfd,struct sockaddr *addr,int *addrlen);
– addr将在函数调用后被填入连接对方的地址信息,如对方的IP、端口等,返回一个新的socket描述符。
– accept缺省是阻塞函数,阻塞直到有连接请求。
server.c 实验代码如下:
#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>int main(int argc,char **argv){char *client;int server_sockfd,client_sockfd;socklen_t server_len,client_len;struct sockaddr_in server_address;struct sockaddr_in client_address;server_sockfd = socket(AF_INET,SOCK_STREAM,0);bzero(&server_address, sizeof(server_address));server_address.sin_family = AF_INET;server_address.sin_addr.s_addr = htonl(INADDR_ANY);//自动获取ip地址,client不能用这个宏定义 server_address.sin_port = htons(8012);server_len=sizeof(server_address);bind(server_sockfd,(struct sockaddr *)&server_address,server_len);listen(server_sockfd,10);while(1){char msg_client[100];char *msg_server = "hello client";int n;printf("server is waiting... \n");client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);n = read(client_sockfd, msg_client, 100);msg_client[n] = '\0';printf("receive message form client: %s\n",msg_client);write(client_sockfd, msg_server, strlen(msg_server));close(client_sockfd);}return 0;}
client.c 实验代码如下:
#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>int main(int argc,char **argv){int client_sockfd;socklen_t len;struct sockaddr_in sock_address;int ret;char *msg_send = "hello server";char msg_rec[100];int n;client_sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&sock_address, sizeof(sock_address));sock_address.sin_family=AF_INET;sock_address.sin_addr.s_addr=inet_addr("192.168.80.128");sock_address.sin_port=htons(8012);ret=connect(client_sockfd,(struct sockaddr *)&sock_address,sizeof(sock_address));if(ret<0){printf("connect error\n");return -1;}write(client_sockfd,msg_send,strlen(msg_send));n = read(client_sockfd,msg_rec,100);msg_rec[n] = '\0';printf("message form server: %s\n",msg_rec);close(client_sockfd);return 0;}
- linux网络编程中tcp
- Linux 网络编程 TCP
- 【Linux网络编程】TCP
- Linux TCP网络编程
- linux TCP网络编程
- Linux网络---TCP编程
- Linux网络编程-TCP
- Linux网络编程-TCP
- Linux TCP网络编程示例
- linux网络编程TCP篇
- Linux TCP网络编程示例
- linux网络编程-TCP网络程序设计
- Linux TCP网络编程示例
- Linux网络编程--tcp服务器
- Linux网络编程--tcp服务器
- linux 网络编程 Tcp文件服务器
- linux网络编程--TCP/IP网络编程中socket的行为
- linux网络编程--TCP/IP网络编程中socket的行为
- 论文阅读:Comparative Study of Deep Learning Software Frameworks( caffe、Neon、TensorFlow、Theano、Torch 之比较)
- mac chrome 常用插件
- 摆脱VC++6.0,教你如何用visual Studio2010完美运行C++程序
- laravel_基础_Response|redirect|cookie|view|json|jsonp|download
- IEEE POSIX 标准
- linux网络编程中tcp
- python2.x代码自动转换成python3.x
- The new way of ioctl()----转自LWN.net
- session 和cookie 的异同
- 计算机科学的知识领域
- kmp模版poj3461
- 打造自己的通用适配器
- Vector和Stack分析
- STM32中断优先级分组管理