您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-01 10:45 676 查看
最近心血来潮想从新温习一下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。
搞定了,编译通过了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: