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>
#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")
#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>
#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'
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
- Eclipse下C语言的Socket编程(Winsock,gcc)问题总结
- winsock教程- windows下的socket编程(c语言实现)
- 纯C语言下 的Socket编程及常见问题总结
- [编程代码]一个linux下的gcc/c语言makefile
- WINSOCK API的Socket编程
- WINSOCK API的Socket编程
- linux 下的C语言编程(总结)(精华)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- linux下的C语言编程(总结篇)
- STM32F103VCT6低功耗测试(待机模式)
- 设计模式C++实现(2)——策略模式
- Launcher3--初识Launcher3
- Linux 命令个人总结
- chrome插件开发----消息传递
- Eclipse下C语言的Socket编程(Winsock,gcc)问题总结
- 深入浅出RxJava(一:基础篇)
- android studio生成jar包
- 两个队列实现一个栈-剑指offer
- UIViewController 间的传值方式
- Spring MVC POM
- springmvc学习笔记——ModelAttribute
- YCbCr与YUV的区别
- 华为手机 6.0 拍照相册选择权限问题