/*server.c*/
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#define err_log(errlog) do{ perror(errlog); exit(1);}while(0)
int main(int argc, const char *argv[])
{
int sockfd;
int acceptfd;
struct sockaddr_in serveraddr, clientaddr;

16 if (argc != 3)
{
fprintf(stderr,"Usage:%s serverip port.\n", argv[]);
return -;
}
/*server端 第一步:socket 创建套接字*/
if((sockfd = socket(AF_INET, SOCK_STREAM, )) < )
{
err_log("fail to socket");
}
/*server端 第二步: 填充网络信息结构体*/
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = inet_addr(argv[]);//argv[1]:由手动输入,终端的第二个参数
serveraddr.sin_port = htons(atoi(argv[]));//htons 将本地字节序变为网络字节序,atoi将数字类字符串转化为数字,如字符串“80” 变为数字80
/*server端 第三步 :bind() 绑定*/
if(bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < )
{
err_log("fail to bind");
}
/*server端 第四步:listen() 监听*/
if(listen(sockfd, ) < )
{
err_log("fail to listen");
} socklen_t addrlen = sizeof(struct sockaddr_in);
/*接收客户端的连接请求*/
acceptfd = accept(sockfd, (struct sockaddr *)&clientaddr, &addrlen); if(acceptfd < )
{
err_log("fail to acceptfd");
} printf("%s --> %d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
/*inet_ntoa函数将网络字节序的IP地址转换为十进制的字符串*/
/*ntohs 将网络端口号转换为本地端口号*/
close(acceptfd); //关闭文件描述符
close(sockfd);//关闭文件描述符 52 return ;
}

 /*client*/
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#define err_log(errlog) do{ perror(errlog); exit(1);}while(0) int main(int argc, const char *argv[])
{
int sockfd;
int acceptfd;
struct sockaddr_in serveraddr, clientaddr; if(argc != )
{
fprintf(stderr,"Usage:%s serverip port.\n", argv[]);
return -;
}
/*client端 第一步:socket套接字*/
if((sockfd = socket(AF_INET, SOCK_STREAM, )) < )
{
err_log("fail to socket");
}
/*client端 第二部:填充网络信息结构体*/
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = inet_addr(argv[]);
serveraddr.sin_port = htons(atoi(argv[]));
/*client端 第三步:连接服务器端*/
if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < )
{
err_log("fail to connect");
}
close(sockfd);//关闭文件描述符
return ;
}

socket编程热身程序的更多相关文章

  1. 基于win32的socket编程及程序实现

    初步研究了win32平台的Windows Sockets,它是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用. ...

  2. UNIX SOCKET编程简介

    1  .  Layered Model of Networking Socket  编程的层次模型如下图所示,   最上面是应用层,应用层下面的是  SOCKET API  层,再下面是传输层和网络层 ...

  3. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  4. Socket编程指南及示例程序

    例子代码就在我的博客中,包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库.资源和执行程序.代码的压缩包位置是http://www.blogja ...

  5. Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程

    设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...

  6. Socket网络编程--聊天程序(9)

    这一节应该是聊天程序的最后一节了,现在回顾我们的聊天程序,看起来还有很多功能没有实现,但是不管怎么说,都还是不错的.这一节我们将讲多服务器问题(高大上的说法就是负载问题了.)至于聊天程序的文件发送(也 ...

  7. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  8. Socket编程指南及示例程序(转)

    1         前言 在一些常用的编程技术中,Socket网络编程可以说是最简单的一种.而且Socket编程需要的基础知识很少,适合初学者学习网络编程.目前支持网络传输的技术.语言和工具繁多,但是 ...

  9. boost 编译 asio 程序,简单socket 编程

    自己第一次玩boost,对C++也非常不熟悉,记录一下自己的学习过程. 安装编译 boost 包解压到/opt下 tar -zxvf /media/C06EDE596EDE47B4/mnt/boost ...

随机推荐

  1. 【小白的CFD之旅】12 敲门实例【续2】

    接上文[小白的CFD之旅]敲门实例[续] 主要内容 3 Solution3.1 Solution Methods3.2 Solution Controls3.3 Monitors3.4 Report ...

  2. EF6 Create Different DataContext on runtime(运行时改变连接字符串)

    引言   在使用EF时,有时我们需要在程序运行过程中动态更改EF的连接字符串,但不幸的时EF是否对 ConfigurationManager.RefreshSection("xxx" ...

  3. c++适配器

    容器适配器是是标准库中通用的概念,包括容器适配器.迭代器适配器和函数适配器,本质上,适配器是使一种事物的行为类似于另一种事物的的行为的一种机制,容器适配器使一种已经存在的容器类型采用另一种不同的抽象类 ...

  4. Oracle基本数据类型

    一 字符串类型 字符串数据类型还可以依据存储空间分为固定长度类型(CHAR/NCHAR) 和可变长度类型(VARCHAR2/NVARCHAR2)两种. 所谓固定长度:是指虽然输入的字段值小于该字段的限 ...

  5. JSP 错题

      (选择一项) 8 A: B: C: D: 正确答案是 D 您回答的是 A 回答错误   试题分析:web容器处理JSP文件请求的三个阶段翻译阶段:这一个阶段,编写好的jsp文件首先被web容器中的 ...

  6. 第32课 Qt中的文件操作

    1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...

  7. Hibernate中的一对一关联

    Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...

  8. Child <- many-to-one ->Parent

    网上找到个描述的很精妙的例子 Child   <-   many-to-one   ->Parent         class   Child   {         private   ...

  9. 查找数据库中重复的值的数据,having的使用,count(1),sum等聚会函数

    通过having代替where来使用count(1),sum()等函数.譬如如下数据id value1 21 32 33 53 6 可以写个语句统计value的分组 在这里,可以省略前面的sum(va ...

  10. Java基础知识总结

    写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技 ...