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.源

 

   服务端:

//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 5555
main()
{
int serverSocket;
struct sockaddr_in server_addr;
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
int client;
char buffer[];
int iDataNum ;
if((serverSocket = socket(AF_INET,SOCK_STREAM,)) < )
{
perror("socket");
exit();
}
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)) < )
{
perror("connect");
exit();
}
if(listen(serverSocket,)<)
{
perror("listen");
exit();
}
while()
{
client = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len);
if(client < )
{
perror("accept");
continue;
}
iDataNum = recv(client,buffer,,);
if(iDataNum < )
{
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),);
}
}

   客服端:

//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[];
char recvbuf[];
if((clientSocket=socket(AF_INET,SOCK_STREAM,)) < )
{
perror( "socket error" );
return -;
}
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons();
serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < )
{
perror("connect");
exit();
}
printf("connect with destination host.....\n");
while()
{
printf("Input your World:>");
scanf("%s",sendbuf);
printf("\n");
if(strcmp(sendbuf,"quit") == )
break;
send(clientSocket,sendbuf,sizeof(sendbuf),);
recv(clientSocket,recvbuf,,);
printf("recv data of my world is: %s\n",recvbuf);
}
close(clientSocket);
return ;
}

3.mystery注

 

1) addr_in存储主机IP地址
   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字节序转换

【Socket】linux套接字技术之tcp的更多相关文章

  1. socket - Linux 套接字

    总览 #include <sys/socket.h> mysocket = socket(int socket_family, int socket_type, int protocol) ...

  2. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  3. Linux套接字编程

    网络中的进程是如何通信的? 在网络中进程之间进行通信的时候,那么每个通信的进程必须知道它要和哪个计算机上的哪个进程通信.否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行 ...

  4. iOS - Socket 网络套接字

    1.Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket.Socket 又称 "套接字",应用程序通常通过 "套接字& ...

  5. Win2 Socket(套接字)相关 API

    Socket(套接字) 作者信息 肖进 单位:南京中萃食品有限公司 资讯部 邮箱:xiaoj@njb.swirebev.com 电话:025-58642091 与socket有关的一些函数介绍 1.读 ...

  6. linux 套接字编程入门--Hello World

    下述代码是linux套接字编程的入门代码.分为服务端和客户端源码. 服务端代码的主要流程是绑定ip地址和端口号建立套接字,等待客户端发起访问.接受客户端请求之后,向客户端发送字符串"hell ...

  7. Linux 套接字编程中的 5 个隐患(转)

    本文转自IBM博文Linux 套接字编程中的 5 个隐患. “在异构环境中开发可靠的网络应用程序”. Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新 ...

  8. 【 Linux 】Linux套接字简要说明

    Linux套接字    源IP地址和目的IP地址以及源端口和目标端口号的组合称为套接字.其作用于标识客户端请求的服务器和服务. 套接字,支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间 ...

  9. Linux 套接字与文件描述符

    端口和套接字,用于确定指定主机上的哪个本地进程使用了哪个协议和哪台远程主机上的哪个进程进行了通信.端口和套接字的使用可以基于以下几点: ①为每个应用过程分配一个过程标识符(Process ID),每次 ...

随机推荐

  1. keras callback中的stop_training

    keras这个框架简洁优美,设计上堪称典范.而tensorflow就显得臃肿庞杂,混乱不清.当然,keras的周边部件比如callbacks.datasets.preprocessing有许多过度设计 ...

  2. JavaScript 消息框,警告框,确认框,提示框

    1.警告框 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行操作. 语法: alert("文本") 2.确认框 确认框用于使用户可以验证或 ...

  3. java结合XPATH解析XML

    做自动化测试的人,都应该对XPATH很熟悉了,但是在用JAVA解析XML时,我们通常是一层层的遍历进去,这样的代码的局限性很大,也不方便,于是我们结合一下XPATH,来解决这个问题. 所需要的JAR包 ...

  4. 树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)

    将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...

  5. linux达人养成计划学习笔记(三)—— 帮助命令

    一.帮助命令man 1.基本使用方法: man 命令 #获取指定命令的帮助选项: -f 查看命令拥有的帮助级别 相当于whatis,也可以使用whereis来查询 -num 调用对应等级的帮助文件 - ...

  6. MongoDB 学习笔记(8)---$type 操作符

    $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1   String 2   Object 3 ...

  7. html 图片在一个div中放大缩小效果

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  8. stm32定时器PWM模式和输出比较模式

    pwm模式是输出比较模式的一种特例,包含于输出比较模式中 /** @defgroup TIM_Output_Compare_and_PWM_modes * @{ */ #define TIM_OCMo ...

  9. VMware Linux 共享文件夹 虚拟机无共享文件解决方法

    恢复虚拟机ubuntu后,首先,点击 虚拟机——安装VMware Tools(Install VMware Tools),这时我们会在Ubuntu系统桌面上发现VMware Tools的光盘图标. 双 ...

  10. 使用 MD5 加密 去重对插入的影响

    现在有3000条数据,需要插入到数据库中去,使用的是对链接进行MD5加密, hashcode = md5(str(item_url))然后在数据库中设置 hashcode 为UNIQUE索引 3000 ...