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. Git: fatal: Pathspec is in submodule

    出现是问题: git提交代码是出现fatal: Path 'directory/file' is in submodule 'directory''错误 Removing the directory ...

  2. wp实例开发精品文章源码推荐(8.20)

    热门源码推荐 WP7快递速查源码http://www.apkbus.com/android-115763-1-1.html WP7仿iphone气泡式短信界面 源码http://www.apkbus. ...

  3. 【LeetCode】221. Maximal Square

    Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square containing ...

  4. MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动

    MVC图片上传详解   MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...

  5. easyui datagrid加载数据的三种方式

    1.加载本地数据 var obj = {"total":2,"rows":[{id:"1",name:"一"},{id: ...

  6. javascript 中 split 函数分割字符串成数组

    分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...

  7. sqlserver 在尝试加载程序集 ID 65537 时 Microsoft .NET Framework 出错.服务器可能资源不足

    报错信息: 处理报表时出错. 对数据集“query”执行查询失败. 在尝试加载程序集 ID 65536 时 Microsoft .NET Framework 出错.服务器可能资源不足,或者不信任该程序 ...

  8. Mysql命令行改动字段类型

    在做微信公众平台 知识百科(账号:zhishiwiki) 时,由于字段先前设计的不合理.导致内容装不下,因此须要改动其字段类型为 text 这里使用到了 alter 命令 alter table 表名 ...

  9. stm32调试过程中如何判断是程序问题还是硬件问题?

    可以用软件仿真,如果软件仿真时寄存器什么的都正确,而硬件在线仿真时不对,则说明是板子硬件的问题

  10. [转]如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...