Eclipse下C语言的Socket编程(Winsock,gcc)问题总结

来源:互联网 发布:java开发案例书籍 编辑:程序博客网 时间:2024/05/16 09:52

最近心血来潮想从新温习一下C语言(工作后一直用Java,其实大学时C语言课程也没好好上,正经的代码基本没写过,惭愧啊!),找了些小例子,修修改改,编译、运行、测试,很快也算上手了。IDE我用的是Eclipse(Java编程时一直都用习惯了,情有独钟),编译器用gcc,操作系统Win8;小程序有点玩腻了,今天想来个跨越,搞些有点实际意义的代码,就想到了Socket编程。毕竟网络编程还是很重要的(Java中快玩烂掉了,jdk的api很好用,比C语言容易),但是C语言网络编程这块我是一穷二白啊,所以呢就先百度了一下,找到很多例子,但是很多都有问题,主要有如下几种:

  • 操作系统问题
有些例程是Linux下的socket编程代码,一般文件头像这样:
#include <stdlib.h>  
#include <sys/types.h>  
#include <stdio.h>  
#include <sys/socket.h>  
#include <linux/in.h>  
#include <string.h>  
这个并不适合我目前的开发环境,C语言这点上也是比较麻烦,不像Java是跨平台的,你需要为不同的系统单独实现一个版本,java的native方法就是这么做的,只不过jdk帮我们做好了。
  • 编译器问题
有的例子是这样子的:
#include "stdafx.h"  
#include <stdio.h>  
#include <winsock2.h>  
#pragma comment(lib,"ws2_32.lib") 
一开始我用了,但发现编译不通过,"stdafx.h"  和#pragma 在gcc里根本就木有,原来这些都是vc的语法,这个也pass了。

  • ws2_32.lib问题
后来找了个纯C的:
#include<winsock2.h>
#include<stdio.h>
但是编译时报错了:
VARCHARserver.c:12: undefined reference to `WSAStartup@8'
VARCHARserver.c:17: undefined reference to `WSACleanup@0'
VARCHARserver.c:20: undefined reference to `socket@12'
VARCHARserver.c:22: undefined reference to `htonl@4'
VARCHARserver.c:24: undefined reference to `htons@4'
VARCHARserver.c:26: undefined reference to `bind@12'
VARCHARserver.c:30: undefined reference to `listen@8'
VARCHARserver.c:38: undefined reference to `accept@12'
VARCHARserver.c:49: undefined reference to `send@16'
VARCHARserver.c:55: undefined reference to `recv@16'
VARCHARserver.c:57: undefined reference to `closesocket@4'


查一些资料,大概意思就是,gcc缺少库“ws2_32.lib”,需要在编译时指定:
gcc prog.c -o prog.exe [...other .c and .o files...] -lws2_32 ...
使用-l选项,那么这个参数能否在eclipse中配置呢,我自己找了一下,是可以配置的:


点击工程属性-->C/C++ Bulid-->Settings-->Tool Settings-->MinGW C Linker-->Libraries ,在这里面添加wsock32。
搞定了,编译通过了。

1 0
原创粉丝点击