“ 简单的socket编程例子 ”

study_vc 2002-01-23 01:34:19
简单的socket编程例子
/*echocli.c --echo client*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/sockets.h>
#include <net/netinet.h>
#define BUFLEN 255
int main(int argc,char** argv)
{
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
struct socketaddr_in servaddr; /*服务方socket地址结构 */
int sockfd,h;
char recmsg[BUFLEN+1];
char errmsg[]="echo doesn't function.\n";

if (argc!=2) {
printf("%s<IP address>\n",arfv[0]);
exit(0);
}
sockfd=socket(AF_INET,SOCK_STREAM,0); /*生成一个socket */
if(sockfd<0) {
fprintf(stderr,"socket creating error!\n");
exit(1);
}
memset(&servaddr,0,sizeof(struct sockaddr_in));
servaddr.sin_family=AF_INET; /*使用ipv4协议族的socket*/
servaddr.sin_port= htons(7); /*Echo服务的周知口*/
if(inet_pton(AF_INET,arfv[1],&servaddr.sin_addr) <=0)
{
/*通过inet_pton获得ip地址*/
printf("Wrong IP address!\n");
exit(0);
}
if(connet(sockfd,(struct sockaddr*) (&servaddr),sizeof(struct sockaddr_in) )<0)
{
/*connet将socket这个套接字与指定的ip的地址和断口号连接*/
printf("Connection Failure!\n");
exit(2);
}
printf("Connected to host %s\n",argv[1]);
while (fgets(recmsg,BUFLEN ,stdin) !=NULL)
{ /*从终端读入一行*/
write (sockfd,recmsg,strlen(recmsg) );/* 向sockfd写入*/
printf("sent:%s",recmsg);
strcpy(recmsg,errmsg);
n=read(sockfd,recmsg,BUFLEN); /*从socket读出*/
if(n>0)
{
recmsg[n]=0;
printf("echo:%s",recmsg);
}
else if(n==-1)
{
frpintf(stderr,"read error in client socket!\n");
exit(3);
}
}
exit(0);
}

编译结果说
#include <sys/sockets.h>
#include <net/netinet.h>
没有找到、、、、
工具:dev c++
...全文
4272 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
eggbaby 2002-01-29
  • 打赏
  • 举报
回复
windows下用cgywin编译
new_life 2002-01-28
  • 打赏
  • 举报
回复
ddd
harvey_joy 2002-01-27
  • 打赏
  • 举报
回复
/usr/src/linux/???/???/net/netinet.h

SkyGG 2002-01-27
  • 打赏
  • 举报
回复
在Liunx下编译,在环境变量里设置PATH,让编译器找到你的头文件,最好在当前目录下编译执行。
cxy550 2002-01-26
  • 打赏
  • 举报
回复
编译器vc++,还需加入wsock32.lib ws2_32.lib 这两个连接库
地址你自己设,例子中是一个局域网
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include <iostream.h>
#include <winsock.h>

char space();
FILE *in;
int flag=0;

int main(int argc, char* argv[])
{

WSADATA ws;
SOCKET s;


if((in=fopen("html.html","wb+"))==NULL)
{
printf("创建网页文件出错!!\n");
exit(0);
}
struct sockaddr_in addr;
int iResult=0;
long lResult=0;
char strSubAddr[100], strBuffer[100];
lResult = WSAStartup(0x0101,&ws);
if(lResult!=0)
{
printf("初始化失败!!!");
exit(0);
}

s = socket(AF_INET,SOCK_STREAM,0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr("10.2.1.13"); // NSI WEB Server
printf("正在连接......\n");
iResult=connect(s,(struct sockaddr *)&addr, sizeof(addr));
if(SOCKET_ERROR == iResult)
{
WSACleanup(); // 连接失败
return FALSE;
}

printf("连接成功!!!");// 连接成功

strcpy(strSubAddr, "GET /10109/9.asp HTTP/1.0\r\n\r\n");
iResult = send(s, strSubAddr,strlen(strSubAddr),0);

// 下载文件
while(iResult !=0 )
{
memset(strBuffer,0,sizeof(strBuffer));
//strset(strBuffer,' ');
iResult = recv(s,strBuffer,sizeof(strBuffer),0);
//fprintf(in,"%s\n",strBuffer);
fwrite(strBuffer,iResult,1,in);
}
fclose(in);
WSACleanup();
printf("\n 网页读取成功!!");
}
cxy550 2002-01-26
  • 打赏
  • 举报
回复
wsock32.lib ws2_32.lib
renli21 2002-01-26
  • 打赏
  • 举报
回复
给大家介绍一个好的C++论坛, 里面有电子书下载,还有经典书的讨论, 是C++ 爱好者的一个好论坛。这个论坛是专门为学习C++而设的, 没有其他的东西,可以节省你的好多时间希望高手前去。
地址:httP://pat.chinaccd.net/cpp
目前有五本经典C++电子书下载, 象The C++ Programming lanuguage, thinking in c++
等。
sprintf 2002-01-25
  • 打赏
  • 举报
回复
只是个客户端,谁有服务端程序呀,小弟万分感谢。
joyu 2002-01-25
  • 打赏
  • 举报
回复
如果在 windows下通过VC 开发的话,应该包含
#include "wsock.h"

以下头文件只是在Unix下才有
#include <sys/types.h>
#include <sys/sockets.h>
#include <net/netinet.h>
所以只有在unix的开发环境下才可编译
study_vc 2002-01-24
  • 打赏
  • 举报
回复
求助各位!!!
wwwunix 2002-01-24
  • 打赏
  • 举报
回复
你装个Linux再编译吧,在Linux下有这些头文件。
hssfox 2002-01-24
  • 打赏
  • 举报
回复
kk
peixubin 2002-01-24
  • 打赏
  • 举报
回复
请装linux吧。

study_vc 2002-01-23
  • 打赏
  • 举报
回复
lhjgood()
还的求你帮忙阿。我真的对unix很陌生,请指教下载哪个包,如何用?需要象装系统一样重新分区再装吗???
lhjgood 2002-01-23
  • 打赏
  • 举报
回复
re:: study_vc(博) 
www.linuxeden.com
peggy_s 2002-01-23
  • 打赏
  • 举报
回复
tief(tief) :谢谢!
study_vc 2002-01-23
  • 打赏
  • 举报
回复
to:lhjgood()
麻烦你给个具体的地址,下载后内核是不是要再环境变量里设置什么东西阿。。。。???
lhjgood 2002-01-23
  • 打赏
  • 举报
回复
sys/types.h
意思是:告诉编译器到 sys 下找 types.h 这个头文件。
可以单独下载内核,很多的,用 google 随便搜一下linux即可!
study_vc 2002-01-23
  • 打赏
  • 举报
回复
看来还是得有gcc才行阿
单独的下载内核行否?哪里有下???
lhjgood 2002-01-23
  • 打赏
  • 举报
回复
我已经在 redhat 上编译通过的程序!
加载更多回复(22)

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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