/**************************************************************************
* 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 封装的更多相关文章

  1. 提高 Linux 上 socket 性能

      http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化   1 引言    随着In ...

  2. ACE - 代码层次及Socket封装

    原文出自http://www.cnblogs.com/binchen-china,禁止转载. ACE源码约10万行,是c++中非常大的一个网络编程代码库,包含了网络编程的边边角角.在实际使用时,并不是 ...

  3. linux c socket programming

    原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章 PPT http:/ ...

  4. C# .NET Socket封装

    Socket封装,支持多客户端,支持大文件传输,支持多线程并发,对较大的Socket包进行分块传输. 封装所要达到的效果,是可以像下面这样使用Socket和服务端通信,调用服务端的方法,让你在使用So ...

  5. linux中socket的理解

    对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...

  6. linux 客户端 Socket 非阻塞connect编程

    开发测试环境:虚拟机CentOS,windows网络调试助手        非阻塞模式有3种用途        1.三次握手同时做其他的处理.connect要花一个往返时间完成,从几毫秒的局域网到几百 ...

  7. Linux内核socket优化项

    Linux内核socket优化项 vi /etc/sysctl.confnet.core.netdev_max_backlog = 30000  每个网络接口接收数据包的速率比内核处理这些包的速率快时 ...

  8. LInux下socket编程学习笔记

    1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...

  9. 跨平台的游戏客户端Socket封装,调整

    原文链接:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019359.html 头文件: #pragma once #ifdef WIN32 ...

随机推荐

  1. Linq 常用方法解释

    /// <summary> /// linq /// </summary> public class Linq { /// <summary> /// 测试 /// ...

  2. pandas.read_csv参数整理

    读取CSV(逗号分隔)文件到DataFrame,也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/pandas-docs/stable/io.html 参 ...

  3. Qt5.3.2(VS2010)_调试_进入Qt源码

    1.必须是 Debug模式 2. http://blog.csdn.net/mayenjoy/article/details/42535789 http://blog.csdn.net/goforwa ...

  4. air for android 使用ANE来获取安卓手机IMEI号

    一首页创建一个ANE文件 1 使用FlashBuilder 或者Eclipse 创建一个新的android项目     A 创建文件Extension.java package com.dabing. ...

  5. 常用的vi/vim基本命令(持续更新)

    ★删除/复制/粘贴 全部删除:按esc后,然后dG  全部复制:按esc后,然后ggyG  全选高亮显示:按esc后,然后ggvG或者ggVG   按“+p“可将系统全局粘贴板里的内容粘贴进来   y ...

  6. es5,es6,typescript,nodejs

    es5新特性 讲到js必讲的几个概念,作用域,闭包,IIFE自执行函数 es5主要是对Object,Array,Function做了扩展,还有josn工具 es6新特性 增加了新的数据类型 WeakM ...

  7. 更改Windows Update设置时,为何会提示“某些设置由你的系统管理员管理”?

    亲测有效 及时进行更新是保证系统正常运行的一个有效措施.可为什么当我们进入“控制面板->Windows Update”手动修改 Windows Update 的设置时,系统却弹出提示“某些设置由 ...

  8. rsync+inotify文件同步 - 同步慢的问题

    rsync+inotify文件同步 - 同步慢的问题 我们来看网上的教程,我加了注释.(网上所有的教程基本都一模一样,尽管写法不一样,致命点都是一样的) #!/bin/bash /usr/bin/in ...

  9. LeetCode--175--组合两个表

    问题描述: 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | ...

  10. Confluence 6 结构(Schema )设置

    基本 DN(Base DN) 根专有名称(DN)将会在你在目录服务器上运行查询的时候使用到.例如: o=example,c=com cn=users,dc=ad,dc=example,dc=com 针 ...