有这么复杂吗?给你一段势力代码吧~~~
记得自己初始化SOCKET
struct sockaddr_in svr;
int fd; if ( ( fd = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 )
{
perror("socket");
return 1;
}
p->sock = fd; svr.sin_family = AF_INET;
svr.sin_port = htons( ACD_LISTEN_PORT ); svr.sin_addr.s_addr = inet_addr( ACD_HOST_IP );// printf("connecting to %s...\n", ip );
if ( connect( fd, (struct sockaddr *)&svr, sizeof(svr) ) != 0 )
{
AfxMessageBox("connect to fail." );
return 0;
}
USHORT id = 999;
send( fd, (char*)&id, 2, 0 );
记得自己初始化SOCKET
struct sockaddr_in svr;
int fd; if ( ( fd = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 )
{
perror("socket");
return 1;
}
p->sock = fd; svr.sin_family = AF_INET;
svr.sin_port = htons( ACD_LISTEN_PORT ); svr.sin_addr.s_addr = inet_addr( ACD_HOST_IP );// printf("connecting to %s...\n", ip );
if ( connect( fd, (struct sockaddr *)&svr, sizeof(svr) ) != 0 )
{
AfxMessageBox("connect to fail." );
return 0;
}
USHORT id = 999;
send( fd, (char*)&id, 2, 0 );
解决方案 »
- 请教下PostThreadMessage/PostMessage发送的消息其响应顺序是否和投递顺序一样
- 新手广播代码
- text-to-speech 控制中英文广阅读
- 局域网连接SQLSERVER问题??
- 100分求助,关于ACESS数据库编程!
- 在头文件.h中发现一个类的申明,那我如何通过VC6.0的环境快速的定位到这个类的详细实现中呢?
- 刚开始学OpenGL,认真两字真重要,向本版的前辈学习!!
- 为什么我的vc编译后有如下错误?????
- missing storage-class or type specifiers
- 如何用HtmlView做的浏览器,在新开窗口时不会跳出IE?
- 简单问题没人答?还是。。。
- 怎样保存一个CFont对象到文件里?以后还可以读出来的Serialize()函数怎样写?
#include "stdafx.h"
#include <winsock2.h>
#include "io.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"#define PROTOPORT 13
extern int errno;
char localhost[]="time-a.nist.gov";//default time servervoid main(int argc, char* argv[])
{
struct hostent *ptrh;
struct protoent *ptrp;
struct sockaddr_in sad;
int sd;
int port;
char *host;
int n;
char buf[1000];
printf("Program started\n");
WSADATA wsaData;
WSAStartup(0x0101,&wsaData);
memset((char *) &sad,0,sizeof(sad));
sad.sin_family=AF_INET;
if(argc>2)
port = atoi(argv[2]);
else
port = PROTOPORT;
if(port>0)
sad.sin_port=htons((u_short)port);
else
{
fprintf(stderr,"bad port number %s\n",argv[2]);
exit(1);
} if(argc>1)
host = argv[1];
else
host= localhost; ptrh = gethostbyname(host);
if(ptrh==NULL)
{
fprintf(stderr,"invalid host:%s\n",host);
exit(1);
}
printf("Host:%s,Port number:%d\n",host,port);
memcpy(&sad.sin_addr,ptrh->h_addr_list[0],ptrh->h_length);
// or you can use IP address sad.sin_addr.s_addr = inet_addr("129.6.15.28");
if( ((ptrp=getprotobyname("tcp"))) ==NULL)
{
fprintf(stderr,"cannot map \"tcp\" to protocol number");
exit(1);
} sd = socket(AF_INET,SOCK_STREAM,0);//ptrp->p_proto
if(sd<0)
{
fprintf(stderr,"socket creation error\n");
exit(1);
}
else
printf("sd=%d",sd);
if(connect(sd,(sockaddr*)&sad,sizeof(sockaddr_in ))!=0)
{
fprintf(stderr,"connect failed\n");
exit(1);
}
n = recv(sd,buf,sizeof(buf),0);
while(n>0)
{
_write(1,buf,n);
n= recv(sd,buf,sizeof(buf),0);
}
closesocket(sd);
exit(0);
}
server.sin_port = htons(6000);
server.sin_addr.s_addr = inet_addr("192.168.2.4");另外,你说的能连通,不能通讯是不能读呢还是不能写?具体在哪一条错误??
n = recv(sd,buf,sizeof(buf),0);
while(n>0)
{
_write(1,buf,n);
n= recv(sd,buf,sizeof(buf),0);
}
我再简单解释一下:
1. TCP是流式的,它传送的byte stream. 所以接收方recv(...)调一次可能只接收一个字节,也可接收多个字节
2. 所以必须循环调
3. 当这个socket被对方close()时, recv(...)返回0
4. 当这个socket被对方错误时, recv(...)返回<0