请教codeblocks编译套接字纯C链接WS2_32.LIB库的问题

beanmusic 2011-09-04 10:11:34
IDE 我觉得就CODEBLOCKS好用
百度过好多次 没有这方面的具体信息
希望有高手不辞辛苦 步步说明如何设置
代码应该没有问题
#include <windows.h>
#include <socket2.h>
目前的情况是 用GCC 在编译 LINKER 里头加入了 WS2_32.LIB 无效
加入 libws2_32.a 也无效
代码前头加 #pragma comment (lib,"ws2_32")显示 ignore (忽略)
在命令行下 使用 GCC main.c -o main.exe -lws2_32 显示一大堆错误提示
没辙了 只有这里有希望找到答案
请高手不吝赐教

顺便例程附上:不讨论代码的好坏 只求编译通过 请说明哪个菜单 哪个项目 哪个设置 用什么格式 越详细越好 希望这次能彻底解决

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define PORT 1129
#define ADDRESS "127.0.0.1"
#define true 1
#pragma comment (lib,"ws2_32")


WINSOCK_API_LINKAGE int PASCAL WSAStartup(WORD,LPWSADATA);
int main()
{
char press[20];
scanf("%s",press);
if(press[0]=='1')
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if(WSAStartup(sockVersion,&wsaData)!=0)
return 0;
SOCKET sSever=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sSever==INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
SOCKADDR_IN sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(1129);
sin.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sSever,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("bind error!\n");
return 0;
}
if(listen(sSever,5)==SOCKET_ERROR)
{
printf("listen error!\n");
closesocket(sSever);
return 0;
}
//sockaddr_in remoteAddr;
SOCKADDR_IN remoteAddr;
SOCKET sClient;
int nAddrlen=sizeof(SOCKADDR_IN);
char revData[255];
while(1)
{
sClient=accept(sSever,(SOCKADDR*)&remoteAddr,&nAddrlen);
if(sClient==INVALID_SOCKET)
{
printf("accpet error.\n");
continue;

}
printf("accept the connect from %s",inet_ntoa(remoteAddr.sin_addr));
while(true)
{
int ret=recv(sClient,revData,255,0);
if(ret==0||(ret==SOCKET_ERROR&& WSAGetLastError()==WSAECONNRESET))
{
printf("%s close the connect\n",inet_ntoa(remoteAddr.sin_addr));
closesocket(sClient);
break;
}
else
{
revData[ret]='\0';
printf("%s",revData);
}
}
}
closesocket(sSever);
WSACLeanup();
}
if(press[0]=='1')
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if(WSAStartup(sockVersion,&wsaData)!=0)
return 0;
SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient==INVALID_SOCKET)
{
printf("client socket error.\n");
return 0;
}
SOCKADDR_IN remote;
remote.sin_family=AF_INET;
remote.sin_port=htons(1129);
remote.sin_addr.s_addr=inlet_addr(ADDRESS);
if(connect(sClient,(SOCKADDR*)&remote,sizeof(SOCKADDR))==SOCKET_ERROR)
{
printf("client connection error\n");
closesocket(sClient);
return 0;
}
while(true)
{
char SendData[255];
int i,ch;
for(i=0;(i<254)&&((ch=getchar())!=EOF)&&(ch!='\n');i++)
SendData[i]=(char)ch;
SendData[i]='\n';
SendData[i+1]='\0';
send(sClient,SendData,i+2,0);

}
closesocket(sClient);
WSACleanup();
return 0;
}
return 0;
}

...全文
663 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beanmusic 2011-09-06
  • 打赏
  • 举报
回复
PCX XUNXUN1982 你帮帮我吧 我还是编不过去 正巧我也是82年的
我的 叩叩 是185 159 353 能遥控我编一下吗
xunxun 2011-09-04
  • 打赏
  • 举报
回复

这个忘了说
jackyjkchen 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xunxun1982 的回复:]

写错了一个
把inlet_addr
改为
inet_addr

我使用
gcc main.c -o main.exe -lws2_32

无任何问题

我用的是自己编译的gcc4.6.1和codeblocks for windows
[/Quote]
WSACLeanup也要改成WSACleanup
xunxun 2011-09-04
  • 打赏
  • 举报
回复
写错了一个
把inlet_addr
改为
inet_addr

我使用
gcc main.c -o main.exe -lws2_32

无任何问题

我用的是自己编译的gcc4.6.1和codeblocks for windows
jackyjkchen 2011-09-04
  • 打赏
  • 举报
回复
gcc 4.4.5和VC2010测试通过

用gcc main.c -lws2_32

为什么我立刻能找到拼写错误,就是VC+VA的优势,写的对的和不对的函数颜色都不一样……

楼主真喜欢codeblocks,当我没说
jackyjkchen 2011-09-04
  • 打赏
  • 举报
回复
两处拼写错误


#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define PORT 1129
#define ADDRESS "127.0.0.1"
#define true 1
#pragma comment (lib,"ws2_32")


WINSOCK_API_LINKAGE int PASCAL WSAStartup(WORD,LPWSADATA);
int main()
{
char press[20];
scanf("%s",press);
if(press[0]=='1')
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if(WSAStartup(sockVersion,&wsaData)!=0)
return 0;
SOCKET sSever=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sSever==INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
SOCKADDR_IN sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(1129);
sin.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sSever,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("bind error!\n");
return 0;
}
if(listen(sSever,5)==SOCKET_ERROR)
{
printf("listen error!\n");
closesocket(sSever);
return 0;
}
//sockaddr_in remoteAddr;
SOCKADDR_IN remoteAddr;
SOCKET sClient;
int nAddrlen=sizeof(SOCKADDR_IN);
char revData[255];
while(1)
{
sClient=accept(sSever,(SOCKADDR*)&remoteAddr,&nAddrlen);
if(sClient==INVALID_SOCKET)
{
printf("accpet error.\n");
continue;

}
printf("accept the connect from %s",inet_ntoa(remoteAddr.sin_addr));
while(true)
{
int ret=recv(sClient,revData,255,0);
if(ret==0||(ret==SOCKET_ERROR&& WSAGetLastError()==WSAECONNRESET))
{
printf("%s close the connect\n",inet_ntoa(remoteAddr.sin_addr));
closesocket(sClient);
break;
}
else
{
revData[ret]='\0';
printf("%s",revData);
}
}
}
closesocket(sSever);
WSACleanup();
}
if(press[0]=='1')
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if(WSAStartup(sockVersion,&wsaData)!=0)
return 0;
SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient==INVALID_SOCKET)
{
printf("client socket error.\n");
return 0;
}
SOCKADDR_IN remote;
remote.sin_family=AF_INET;
remote.sin_port=htons(1129);
remote.sin_addr.s_addr=inet_addr(ADDRESS);
if(connect(sClient,(SOCKADDR*)&remote,sizeof(SOCKADDR))==SOCKET_ERROR)
{
printf("client connection error\n");
closesocket(sClient);
return 0;
}
while(true)
{
char SendData[255];
int i,ch;
for(i=0;(i<254)&&((ch=getchar())!=EOF)&&(ch!='\n');i++)
SendData[i]=(char)ch;
SendData[i]='\n';
SendData[i+1]='\0';
send(sClient,SendData,i+2,0);

}
closesocket(sClient);
WSACleanup();
return 0;
}
return 0;
}

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧