【Linux技术】linux套接字技术之tcp
来源:互联网 发布:算法设计与分析怎么学 编辑:程序博客网 时间:2024/06/05 03:35
1.mystery引入
1)UDP也可以编写出C/S程序 ,另外TCP也可以编写点对点通信。
2)网络的本质就是资源共享,当前流行的P2P应用正好暗合了这种精神。
3)当前流行的Web服务,其标准协议是HTTP,很多从事Web应用程序开发的开发者,从事的就是这种应用的网络编程,所采用的开 发模式是浏览器/服务器结构,也称为B/S结构 。
4)B/S结构是C/S结构的一个变种,是指开发者不需要开发独立的客户端软件,浏览器就是此时的客户端,开发者只需要在服务器端编写并部署脚本,资源请求者就可以通过URL进行访问了。
5)Socket提供一种原始套接字机制,能够让开发者直接操纵IP层。
6)利用Socket编程还可以编写出广播和组播应用程序。
7)广播是指向当前局域网所有的在线主机发送数据,ARP协议就是利用广播机制。
8)组播相对广播,也可了理解为广播的一个子集,类似于QQ中的群。
2)网络的本质就是资源共享,当前流行的P2P应用正好暗合了这种精神。
3)当前流行的Web服务,其标准协议是HTTP,很多从事Web应用程序开发的开发者,从事的就是这种应用的网络编程,所采用的开 发模式是浏览器/服务器结构,也称为B/S结构 。
4)B/S结构是C/S结构的一个变种,是指开发者不需要开发独立的客户端软件,浏览器就是此时的客户端,开发者只需要在服务器端编写并部署脚本,资源请求者就可以通过URL进行访问了。
5)Socket提供一种原始套接字机制,能够让开发者直接操纵IP层。
6)利用Socket编程还可以编写出广播和组播应用程序。
7)广播是指向当前局域网所有的在线主机发送数据,ARP协议就是利用广播机制。
8)组播相对广播,也可了理解为广播的一个子集,类似于QQ中的群。
2.源码
//TCPServer.c#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#define SERVER_PORT 5555main(){ int serverSocket; struct sockaddr_in server_addr; struct sockaddr_in clientAddr; int addr_len = sizeof(clientAddr); int client; char buffer[1024]; int iDataNum ; if((serverSocket = socket(AF_INET,SOCK_STREAM,0)) < 0) { perror("socket"); exit(1); } bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family =AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0) { perror("connect"); exit(1); } if(listen(serverSocket,5)<0) { perror("listen"); exit(1); } while(1) { client = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len); if(client < 0) { perror("accept"); continue; } iDataNum = recv(client,buffer,1024,0); if(iDataNum < 0) { perror("Recv"); continue; } printf("\nRecv client data.......\n"); printf("IP is %s\n",inet_ntoa(clientAddr.sin_addr)); printf("Port is %d\n",htons(clientAddr.sin_port)); printf("Recv Data is %s\n",buffer); send(client,buffer,sizeof(buffer),0); }}
客服端:
//TCPClient.c#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>main(){ struct sockaddr_in serverAddr; int clientSocket; char sendbuf[200]; char recvbuf[200]; if((clientSocket=socket(AF_INET,SOCK_STREAM,0)) < 0) { perror( "socket error" ); return -1; } serverAddr.sin_family=AF_INET; serverAddr.sin_port=htons(5555); serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1"); if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < 0) { perror("connect"); exit(1); } printf("connect with destination host.....\n"); while(1) { printf("Input your World:>"); scanf("%s",sendbuf); printf("\n"); if(strcmp(sendbuf,"quit") == 0) break; send(clientSocket,sendbuf,sizeof(sendbuf),0); recv(clientSocket,recvbuf,200,0); printf("recv data of my world is: %s\n",recvbuf); } close(clientSocket); return 0;}
3.mystery注解
2)sockaddr_in用于表示Internet协议簇地址结构
3)sockaddr存储主机IP地址与接口信息
4)addr_in是一个结构体,其中包含一个联合体,其中结构体s_un_b中的4个字段s_b1/s_b2/s_b3/s_b4分别对应IP地址点分法下的4个 值
5)inet_addr()函数的作用是将字符形式的IP地址转换成整数值
6)htons()和htonl()函数用于字节序的转换,表示将数值从主机字节序转换成网络字节序
7)htons()函数是16字节序转换
8)htonl()函数是32字节序转换
本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1155096
- 【Linux技术】linux套接字技术之tcp
- linux Tcp 套接字
- Linux网络编程之TCP套接字
- Linux套接字(TCP篇)
- linux TCP套接字编程
- Linux TCP套接字编程
- linux网络编程之套接字/TCP/IP
- Windows套接字技术
- linux IPC之套接字
- 【Linux基础】面向连接的套接字通信(TCP)之函数格式
- 【Linux基础】面向连接的套接字通信(TCP)之使用实例
- 【Linux基础】面向连接的套接字通信(TCP)之函数说明
- 【Linux基础】面向连接的套接字通信(TCP)之函数格式
- linux之读写锁技术
- linux技术
- 【Linux技术】linux广播技术
- 【Linux技术】linux之消息队列
- 【Linux技术】linux之thread错误解决方案
- 【Linux技术】linux连接mysql错误解决方案
- 【Linux技术】linux之消息队列
- 【Linux技术】linux之thread错误解决方案
- 深入浅出UML类图
- 【Linux技术】linux之多线程同步互斥技术
- 【Linux技术】linux套接字技术之tcp
- linux 内核GPIO 模拟 I2C
- 【Linux技术】linux无连接编程技术
- 全面掌握Java的异常处理机制
- 【Linux技术】linux网络多路复用IO技术
- 【C/C++】exit不兼容解决方案
- Linux操作系统是如何工作的?
- 【Linux技术】linux黑客之网络嗅探底层原理
- 【Linux技术】linux广播技术