Linux C socket 封装
/**************************************************************************
* Linux C socket 封装
* 声明:
* 同样的代码当然没必要敲很多遍了,一遍就够了,封起来,什么时候要用,
* 什么时候就来这里拿。
*
* 2015-7-4 晴 深圳 南山平山村 曾剑锋
*************************************************************************/ \\\\\\\\-*- 目录 -*-////////
| 一、cat zengjf_socket.h
| 二、cat zengjf_socket.c
\\\\\\\\\\\\\\////////////// 一、cat zengjf_socket.h
#ifndef __ZENGJF_SOCKET_H__
#define __ZENGJF_SOCKET_H__ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h> #define handle_error(msg) { perror(msg); exit(EXIT_FAILURE); } /**
* 客户端socket
* 参数说明:
* 1.ip:服务器ip地址,点分十进制的ip字符串
* 2.port:服务器端口号,字串的形式
* 3.srvaddr:连接到服务器端的sockaddr_in
*/
int socketClient(char* ip, char* port, struct sockaddr_in* srvaddr);
/**
* 服务器端socket
* 参数说明:
* 1.port:监听端口号,是字串的形式
* 2.srvaddr:服务器的sockaddr_in
*
*
* 服务器端socket默认能够同时监听30个连接
*/
int socketServer(char* port, struct sockaddr_in* srvaddr); #endif // __ZENGJF_SOCKET_H__ 二、cat zengjf_socket.c
#include "zengjf_socket.h" int socketClient(char* ip, char* port, struct sockaddr_in* srvaddr){ int sfd; // create a socket
if ((sfd = socket(AF_INET, SOCK_STREAM, )) == -){
handle_error("can not create socketClient.");
} // set the server socket address
srvaddr->sin_family = AF_INET;
srvaddr->sin_port = htons(atoi(port));
inet_aton(ip, &(srvaddr->sin_addr)); // connect
if (connect(sfd, (struct sockaddr *)srvaddr, sizeof(struct sockaddr)) == -){
handle_error("can not connect to server.");
} return sfd;
} int socketServer(char* port, struct sockaddr_in* srvaddr){ int srv_fd;
//the default listen count
int listenCount = ; // create a socket
if ((srv_fd = socket(AF_INET, SOCK_STREAM, )) == -){
handle_error("can not create socketServer.");
} //reuse the socket address
int sockopt = ;
setsockopt(srv_fd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(sockopt)); // set the socket address
srvaddr->sin_family = AF_INET;
srvaddr->sin_port = htons(atoi(port));
srvaddr->sin_addr.s_addr = htonl(INADDR_ANY); // bind the socket with the address
if (bind(srv_fd, (struct sockaddr *)srvaddr, sizeof(struct sockaddr)) == -){
handle_error("can not bind the address.");
} // listening
// default was 30
if (listen(srv_fd, listenCount) == -){
handle_error("can not listening to the port.");
} return srv_fd;
}
Linux C socket 封装的更多相关文章
- 提高 Linux 上 socket 性能
http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化 1 引言 随着In ...
- ACE - 代码层次及Socket封装
原文出自http://www.cnblogs.com/binchen-china,禁止转载. ACE源码约10万行,是c++中非常大的一个网络编程代码库,包含了网络编程的边边角角.在实际使用时,并不是 ...
- linux c socket programming
原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章 PPT http:/ ...
- C# .NET Socket封装
Socket封装,支持多客户端,支持大文件传输,支持多线程并发,对较大的Socket包进行分块传输. 封装所要达到的效果,是可以像下面这样使用Socket和服务端通信,调用服务端的方法,让你在使用So ...
- linux中socket的理解
对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...
- linux 客户端 Socket 非阻塞connect编程
开发测试环境:虚拟机CentOS,windows网络调试助手 非阻塞模式有3种用途 1.三次握手同时做其他的处理.connect要花一个往返时间完成,从几毫秒的局域网到几百 ...
- Linux内核socket优化项
Linux内核socket优化项 vi /etc/sysctl.confnet.core.netdev_max_backlog = 30000 每个网络接口接收数据包的速率比内核处理这些包的速率快时 ...
- LInux下socket编程学习笔记
1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...
- 跨平台的游戏客户端Socket封装,调整
原文链接:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019359.html 头文件: #pragma once #ifdef WIN32 ...
随机推荐
- html 获取鼠标左键事件,滚轮点击事件,右键点击事件
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- jsjl_for_ubuntu12.04
1. VC++代码: #include <stdio.h> #include <windows.h> #include <wchar.h> void MoveMou ...
- MySQL数据库性能优化
mysql查询优化: 1.新增字段索引,查询时若使用到or关键字,则两个字段都需建立索引才能生效 2.sql语句包含子查询,mysql会创建临时表查询结束后删除,影响效率,所以应尽可能使用join替代 ...
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
- [.NET开发] 浅说C#异步和同步
提到异步,那么与之对应的是什么呢?同步.那么C#的异步和同步是如何工作的呢? 首先,我们先来看看栗子: 新建一个控制台应用程序,在Program文件中添加如下代码: 1 static void Mai ...
- (GoRails) 自动侦测用户的时区,使用javascript 的jszt库。
传统方法见:http://www.cnblogs.com/chentianwei/p/9369904.html ⚠️: 两个方法最后都要有controller中的类似before_action :se ...
- dubbo监控报错Error creating bean with name 'uriBrokerService'
在jdk1.8下面会出现此错误 解决方法: 1.更换服务器jdk版本.(会影响其他项目环境) 2.修改dubbo-admin tomcat默认jdk版本. 3.修改dubbo-admin项目依赖(de ...
- tomcat8w.exe 运行 提示 指定的服务未安装 unable to open the service 'tomcat8'
新下载的Tomcat8 解压版,解压缩完成后,双击tomcat8.exe出现个DOS样子的窗口一闪而过消失了,tomcat也没有启动成功.双击tomcat8w.exe 弹出个错误对话框,说“指定的服务 ...
- ccfZ字形扫描
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...
- [Spring Boot] 使用多个Servlet
当使用Spring boot的嵌入式servlet容器时,可以通过Spring bean或扫描Servlet组件的方式注册Servlet.Filter和Servlet规范的所有监听器(例如HttpSe ...