socket programming

进行 socket programming开始要做的工作:

 

On Linux:

 

以下是client代码,使用TCP,注意网络字节序:

 1 #include <sys/socket.h>  
 2 #include <netinet/in.h>  
 3 #include <arpa/inet.h>  
 4 int main()  
 5 {  
 6     int sockfd;  
 7     int len;  
 8     struct sockaddr_in address;  
 9     int result;  
10     struct img_packet img_pkt;  
11     int offset = 0;  
12     sockfd = socket(AF_INET, SOCK_STREAM, 0);  
13     address.sin_family = AF_INET;  
14     address.sin_addr.s_addr = inet_addr("192.168.1.157");   
15     address.sin_port = htons(8080);  
16     len = sizeof(address);  
17     result = connect(sockfd, (struct sockaddr *)&address, len);  
18     if(result < 0)  
19         return -1;  
20     else  
21     {  
22         // send or receive operations  
23     }  
24     return 0;  
25 }  

 

服务器端程序创建socket的方法是一样的,只是要最后要调用bind()、listen()和accept(),示例代码如下:

 

 1 #include <sys/socket.h>  
 2 #include <netinet/in.h>  
 3 #include <arpa/inet.h>  
 4 int main(int argc, char **argv)  
 5 {  
 6     int server_sockfd, client_sockfd;  
 7     size_t server_len, client_len;  
 8     struct sockaddr_in server_address;  
 9     struct sockaddr_in client_address;  
10     int nPort = 8080;  
11     int keepAlive = 1;  
12     server_sockfd = socket(AF_INET, SOCK_STREAM, 0);  
13     server_address.sin_family = AF_INET;  
14     server_address.sin_addr.s_addr = inet_addr("192.168.1.101");  
15     printf("%s:%d/n", inet_ntoa(server_address.sin_addr), nPort);  
16     server_address.sin_port = htons(nPort);  
17     server_len = sizeof(server_address);  
18     bind(server_sockfd, (struct sockaddr *)&server_address, server_len);  
19     listen(server_sockfd, 5);  
20     client_len = sizeof(client_address);  
21     while (1)  
22     {  
23         client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);  
24         // do something  
25           
26         close(client_sockfd);  
27     }  
28     close(server_sockfd);  
29     return 0;  
30 } 

 

使用UDP:

 1 #include <sys/socket.h>  
 2 #include <netinet/in.h>  
 3 #include <arpa/inet.h>  
 4     int sockfd;  
 5     socklen_t len;  
 6     struct sockaddr_in address;  
 7     sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
 8     address.sin_family = AF_INET;  
 9     address.sin_addr.s_addr = INADDR_ANY;     //inet_addr("192.168.1.105");  
10     address.sin_port = htons(9000);  
11     len = sizeof(address);  
12     bind(sockfd, (struct sockaddr *)&address, len);  
13     // do something here 

若要发送数据给其他计算机,其中address.sin_addr.s_addr的值应为对方计算机的IP地址;若是接收数据,则该值在recvfrom()函数中会被赋为对方计算机的IP地址值。bind()函数只有在要监听某个端口的UDP数据时才使用。这时address.sin_addr.s_addr值可设为INADDR_ANY。

 

On Windows:

 

使用TCP连接:

 1 #include <winsock2.h>  
 2     WSADATA wsaData;  
 3     int iResult;  
 4     iResult = WSAStartup(MAKEWORD(2,2), &wsaData);  
 5     if (iResult != 0)  
 6     {  
 7         cout<<"WSAStartup failed: "<<iResult<<endl;  
 8     return -1;  
 9     }  
10     struct sockaddr_in sa;  
11     sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
12     sa.sin_family = AF_INET;  
13     sa.sin_addr.s_addr = inet_addr("192.168.1.166");  
14     sa.sin_port = htons(9000);  
15     int len = sizeof(sa);  
16     iResult = connect(sock, (struct sockaddr *)&sa, len);  
17     if (iResult == SOCKET_ERROR)  
18     {  
19         cout<<"not connected"<<endl;  
20     return -1;  
21     }  
22     // do something here  

UDP:

 1 #include <winsock2.h>  
 2    WSADATA wsaData;  
 3    int iResult;  
 4    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);  
 5    if (iResult != 0)  
 6    {  
 7 //cout<<"WSAStartup failed: "<<iResult<<endl;  
 8 DbgLog((LOG_TRACE, 0, TEXT("WSAStartup failed:  %d"), iResult));  
 9 return -1;  
10    }  
11    struct sockaddr_in sa, from;  
12    SOCKET sock;  
13    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);  
14    sa.sin_family = AF_INET;  
15    sa.sin_addr.s_addr = INADDR_ANY;  
16    sa.sin_port = htons(port);  
17    int len = sizeof(sa);  
18    bind(sock, (struct sockaddr *)&sa, len);  
19    // do something here  

 

转载于:https://www.cnblogs.com/lumao1122-Milolu/p/8043949.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用Veripacks替换构建模块

比较下面的两棵树。 在这两种情况下&#xff0c;目标都是拥有一个具有两个独立模块&#xff08; frontend和reporting &#xff09;和一个共享/公用模块&#xff08; domain &#xff09;的应用程序。 frontend的代码不应访问reporting代码&#xff0c;反之亦然。 两个模块都可…

JS的DOM和BOM

* JavaScript分三个部分: ECMAScript标准:JS的基本的语法DOM:Document Object Model --->文档对象模型----操作页面的元素BOM:Browser Object Model----->浏览器对象模型---操作的是浏览器一、DOM对象 文档:把一个html文件看成是一个文档,由于万物皆对象,所以把这个文档看…

mysql建表的规则_MYSQL建表规则 - Love彼岸花开的个人空间 - OSCHINA - 中文开源技术交流社区...

建立表规约【强制】表名、字段名必须使用小写字母或数字&#xff0c;禁止出现数字开头&#xff0c;禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大&#xff0c;因为无法进行预发布&#xff0c;所以字段名称需要慎重考虑。说明&#xff1a;MySQL 在 Windows 下不区…

数据库(11)-- Hash索引和BTree索引 的区别

索引是帮助mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。 不同的引擎对于索引有不同的支持&#xff1a;Innodb和MyISAM默认的索引是Btree索引&#xff1b;而Mermory默认的索引是Hash索引。 Hash索引 哈希索引包含以数组形式组织的 Bucket 集合。 哈希函数将索…

JBoss AS 8中的Java EE 7和EJB 3.2支持

你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 。 除此以外&#xff0c;此版本的Java EE还引入了EJB规范的EJB 3.2版本。 与EJB 3.1规范相比&#xff0c;EJB 3.2具有一些新功能。 我在这里引用EJB 3.2规范中的文本&#xff0c;总结了新功能&#xff…

MySQL的复制:MySQL系列之十三

一、MySQL复制相关概念 主从复制&#xff1a;主节点将数据同步到多个从节点级联复制&#xff1a;主节点将数据同步到一个从节点&#xff0c;其他的从节点在向从节点复制数据同步复制&#xff1a;将数据从主节点全部同步到从节点时才返回给用户的复制策略叫同步复制异步复制&…

mysql与jframe_java-如何在JFrame上显示从mysql检索到的图像

我在显示从JFrame的数据库检索的图像时遇到问题.这是我将要使用的??????……try{Class.forName("com.mysql.jdbc.Driver");Connection conDriverManager.getConnection("jdbc:mysql://localhost:3306/studio","root","");Statem…

bootstrap到底是用来做什么的(概念)

Bootstrap官网&#xff1a;http://v3.bootcss.com/ Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。 是一个做网页的框架&#xff08;目前最流行的WEB前端框架&#xff09;&#xff0c;就…

hdu 1020 Encoding

题目 这个题有一个挺坑的误区&#xff0c;不是统计字符串中出现的所有字符的个数&#xff0c;而是统计相邻的个数 刚开始就写错了 正解&#xff1a; #include <stdio.h> #include <string.h> int main(){int n,i,num;char str[10001];scanf("%d",&n)…

将NetBeans代码模板弯曲到我的意愿

任何阅读过我关于NetBeans的文章的人都知道&#xff0c;我真的很喜欢NetBeans的众多功能。 但是&#xff0c;最近&#xff0c;我发现自己对NetBeans特定功能的特定问题越来越恼火。 最终&#xff0c;它使我烦恼不已&#xff0c;促使我开始研究如何根据自己的喜好禁用或更改该功…

MySQL安装过程

最近试着重装了下MySQL&#xff0c;安装过程很简单&#xff0c;希望能帮助大家 mysql安装过程 1. 下载&#xff1a; 我下载的是64位系统的zip包&#xff1a; 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 下载zip的包。 下载后解压到对应目录 如&#xff1a;D:…

极简的MyBatis在Spring Boot下的配置

以我的一个项目为例。 0、项目结构&#xff1a; 1、POM中添加MyBatis的依赖&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version> …

mysql sum很慢,可以在MySQL中加快sum()吗?

Im doing a "select sum(foo) from bar" query on a MySQL database thats summing up 7.3mm records and taking about 22 seconds per run. Is there a trick to speeding up sums in MySQL?解决方案No, you cant speed up the function itself. The problem here…

css常用属性总结:颜色和单位

在css代码编写中&#xff0c;估计颜色和单位是必不可少的&#xff0c;然而在css中关于颜色和单位值的写法有很多种写法&#xff0c;所以有必要把它弄清楚。 颜色 当初我在初学前端的时候&#xff0c;就会冒出一个疑问“我该如何设置网页颜色&#xff1f;”&#xff0c;一般常…

JPA –我应该成为懒惰的极端主义者吗?

当您与开发人员讨论将对象映射到关系数据库时&#xff0c;他们经常抱怨JPA性能差&#xff0c;JPA提供程序的行为不可预测等。通常&#xff0c;在对话的某些时候&#xff0c;您会听到&#xff1a; “让我们完全放弃这项技术&#xff0c;我们在上个月的会议上看到了更好的东西。 …

mysql恢复 报错_Mysql 数据恢复报错

1.测试mysql binlog 数据恢复功能&#xff0c;我的mysql版本是5.7.172.删了数据之后&#xff0c;执行show binlog events 命令得到如下记录3.找到开始删除和结束删除的位置&#xff0c;然后执行恢复命令:mysqlbinlog --no-defaults --start-position8991 --stop-position290468…

IONIC

1.项目摘要  随着移动互联网的不断发展&#xff0c;移动端流量所占比例已经越来越高。下图来自IResearch所做的关于移动互联网的市场调研报告 由此我们可以看出&#xff0c;移动互联网在人们生活中的位置越来越重要。 受益于国家“提速降费”以及即将取消流量漫游的优惠政策&…

line-height与图片底部间隙的学习整理转述

前言&#xff1a;这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方&#xff0c;请大家指正&#xff0c;我会持续更新&#xff01; 看大牛张鑫旭的视屏可能会理解的更深一些&#xff0c;点击这里&#xff1b; line-height&#xff0c;两行文字的基线之间的距离&…

java学习之异常之格式

第一个格式&#xff1a; try{}catch(){} 第二个格式&#xff1a; try{}catch(){}finally{} 第三个格式&#xff1a; try{}finally{} 注意&#xff1a;catch是用于处理异常&#xff0c;如果没有catch就代表异常没有被处理过&#xff0c;如果该异常是检测时异常&#xff0c;那么必…

分数DRL:在OptaPlanner中更快,更轻松

对于OptaPlanner &#xff08; Drools Planner&#xff09;6.0.0.Beta1&#xff0c;我已经用更优雅的ConstraintMatch系统替换了ConstraintOccurrence。 结果是您的DRL评分文件为&#xff1a; 快多了 更容易读写 错误的发生率要低得多&#xff0c;因为它们使分数损坏变得更加…