socket编程热身程序
/*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编程热身程序的更多相关文章
- 基于win32的socket编程及程序实现
初步研究了win32平台的Windows Sockets,它是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用. ...
- UNIX SOCKET编程简介
1 . Layered Model of Networking Socket 编程的层次模型如下图所示, 最上面是应用层,应用层下面的是 SOCKET API 层,再下面是传输层和网络层 ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Socket编程指南及示例程序
例子代码就在我的博客中,包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库.资源和执行程序.代码的压缩包位置是http://www.blogja ...
- Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程
设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...
- Socket网络编程--聊天程序(9)
这一节应该是聊天程序的最后一节了,现在回顾我们的聊天程序,看起来还有很多功能没有实现,但是不管怎么说,都还是不错的.这一节我们将讲多服务器问题(高大上的说法就是负载问题了.)至于聊天程序的文件发送(也 ...
- Python Socket 编程——聊天室演示样例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...
- Socket编程指南及示例程序(转)
1 前言 在一些常用的编程技术中,Socket网络编程可以说是最简单的一种.而且Socket编程需要的基础知识很少,适合初学者学习网络编程.目前支持网络传输的技术.语言和工具繁多,但是 ...
- boost 编译 asio 程序,简单socket 编程
自己第一次玩boost,对C++也非常不熟悉,记录一下自己的学习过程. 安装编译 boost 包解压到/opt下 tar -zxvf /media/C06EDE596EDE47B4/mnt/boost ...
随机推荐
- 帆软报表FineReport SQLServer数据库连接失败常见解决方案
1. 问题描述 帆软报表FineReport客户端连接SQLServer(2000.2005等),常常会出现如下错误:com.microsoft.sqlserver.jdbc.SQLServerExc ...
- less简单入门
官网地址 http://lesscss.org/ less手册 www.lesscss.net/ bootstrap官网less介绍 http://www.bootcss.com/p/lesscss/ ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)
核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...
- 内核探测工具systemtap简介
systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法. 什么是systemtap 假如现在有这么一个需求:需要获取正在运行的 ...
- markdown编辑器
经过一番探索终于找到两个可以实时预览的markdown编辑器 一,sublime text 3 + MarkDown Editing + OmniMarkupPreviwer 安装方法网上均有,这里要 ...
- 查看eclipse web项目中jsp编译后的servlet源文件【转】【JSP】
eclipse中,jsp编译后 servlet源文件的位置为: F:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wor ...
- QString, string, int, char* 之间相互转换
这三种数据类型在实际运用中经常需要互相转换,那么这里小结下它们之间的转换方法: - Qstring & string Qt中封装的类十分强大,其成员函数数量之多比STD有过之而无不及,许多程序 ...
- 文法分类的python实现
#-*-coding:utf-8-*- G = raw_input("提示输入文法:"); #G为文法 S = G[2] #识别符号S Vn = raw_input("提 ...
- web 前端常用组件【06】Upload 控件
因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时. 如果是项目经理,需要知道客户将会用什么浏览器来访问系统. 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件. 本篇文章 ...
- 使用caffe训练自己的CNN
现在有这样的一个场景:给一张行人的小矩形框图片, 根据该行人的特征识别出性别. 分析: (1),行人的姿态各异,变化多端.很难提取图像的特定特征 (2),正常人肉眼判别行人的根据是身材比例,头发长度等 ...