技术小结

这是最近做演习项目接触到的结束点的一个小结。s

1. socket通信的常用流程(tcp/ip)

   

 

2.windows socket linux socket的不同

socket版本初始化

windows:调用函数WSAStartup初始化socket版本后,才可以使用socket/bindsocket函数。

   linux:不需要初始化socket版本

  头文件引用

    windows

#include <winsock2.h>

#include <windows.h>

#include <ws2tcpip.h>

注:windows.h一定要放在winsock2.h后面,不然编译的时候会报宏重定义错误。

linux

                            #include <sys/socket.h>

socket 句柄类型

    windows:SOCKET

    linux: int

  socket关闭函数

    windowsclosesocket

    linuxclose

socket错误信息取得

windows:调用WSAGetLastError()取得当前错误码

    linux:直接从系统变量errno中取得,调用strerror()把错误码转换为对应错误信息

  getaddrinfo函数的使用

    windows引用头文件winsock2.h  windows.h  Ws2tcpip.h

    linux:引用头文件件 sys/types.h sys/socket.h netdb.h  unistd.h

 

3. cygwin gcclinux gcc的不同

  cygwin gcc 中函数getaddrinfo是在w32API中,所以使用该函数的场合,必须区分windows/linux,不能使用共同的代码。

  头文件dirent.h中函数使用到的结构体struct dirent的定义不同。cygwin中使用的结构体中没有文件类型。(dirent.h中的函数是用户目录操作的)

 

4.linux c字符编码转换

  linux 默认字符集取得

    调用函数getenv可以从语言环境变量LANG中取得,格式为:语言.字符集

  字符编码转换函数

    函数原型:

    iconv_t iconv_open(const char *tocode, const char *fromcode)

    size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf,size_t *outbytesleft)

    int iconv_close(iconv_t cd)

    函数说明:

    iconv_t iconv_open指定转换的两种码制,生成转换句柄(返回值)tocode:目的编码,fromcode:原编码

    iconv编码转换,返回转换的字符数,可逆的转换不计入(可逆的转换即不需要转换的字符)cd为转换句柄即iconv_open函数的返回值,后四个参数都既是输入参数也是输出参数。输入参数的场合:输入字符串,输入字符串长度,输出buff,输出buffsize;输出参数的场合: 指向还未转换的字符,还未转换的字符数,转换后字符串的尾部,输出buff的剩余空间的字节数,两个char *指针分别指向转换后字符串的尾部。

    iconv_close关闭转换句柄。

5.windows动态库和linux动态库的区别

  函数声明和定义

  windows:头文件中,函数声明如下:

#ifndef AGLOG_C //在对应.c文件的开头定义

                     #ifdef          __cplusplus //C++调用的场合,使用cobject格式

                         extern "C" {

                     #endif

                            // __declspec(dllimport)__stdcall windows动态库函数标识关键字

                     int __declspec(dllimport)__stdcall aglog_init(void);

                     #ifdef          __cplusplus

                         }

         #endif

#endif

在实现文件中动态库关键字对应为__declspec(dllexport)__stdcall

  linux

       和一般函数没有区别

  引用方式(显式)

    windows:引用对应的静态库

       说明:windows动态库编译时也会生成一个.lib文件,即我们上面所说的“对应的静态库”。在这里更确切的应该叫导入库(Import Library),而我们平常所说的静态库叫对象库(Object Library)。导入库是一种比较特殊的对象库文件,它与一个动态库相对应,且仅在程序编译连接的场合使用,被链接器用来解析函数调用。但是,导入库不包含代码,它只为链接器提供动态链接库的信息,以便于链接器对动态链接库中的对象作恰当地链接。

    linux:在gcc命令以-l参数引用动态库

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值