呵呵,我刚做完一个socket通讯程序,就是用到你所说的接口了,比如一个服务端,一个客户端,客户端给服务端发命令,服务端返回结果,这样一个接口程序就完成了。要用到c里面的socket等相关函数以及多个库文件支持来做!简单说就是两个main()程序,编译运行后都在等待,客户端等待从键盘输入指令, 服务端等待接收;;客端输完后,服务端就能显示已收到,并返回一个指令让客户端也接收到。 这种程序一般用于linux等系统下实现通讯,发个简单的客户端给你看看,服务端就不发了呵呵!
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define MAXDATASIZE 100
int main(int argc, char *argv[])
{
if(argc<3){
fprintf(stderr,"Please enter the server's hostname!\n%d",argc);
exit(1);
}
printf("Hello, world %s %s\n",argv[1],argv[2]);
get_telnet_data(argv[1],atoi(argv[2]));
return 0;
}
int get_telnet_data(char *ipaddr,int port)
{
int sockfd,recvbytes;
char buf[MAXDATASIZE];
char *hostip = ipaddr;
struct hostent *host;
struct sockaddr_in serv_addr;
char data[MAXDATASIZE*2] = {0};
host = gethostbyname(hostip);//完成域名转换ip
if (host==NULL)
{
printf("get ip addr error!\n");
return 1;
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);//建立socket
if (sockfd==-1)
{
printf("create socket error!\n");
return 1;
}
serv_addr.sin_family=AF_INET;//初始化serv_addr
serv_addr.sin_port=htons(port);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
int conn_stat = connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr));//通过句炳和serv_addr连接服务端
if (conn_stat==-1)
{ printf("connect failed!\n");
return 1;
}
recvbytes = 1;
while (recvbytes>0)//循环发送与返回(客户端先发送后监听,服务端先监听后返回)
{ memset(buf,0,sizeof(buf));
printf("the order is: ");
scanf("%s",buf);
if (send(sockfd, buf, 100, 0)==-1)//发送信息,失败返回-1
{
printf("send failed!\n");
close(sockfd); return 1;
}
recvbytes=recv(sockfd, buf, MAXDATASIZE, 0);//接收返回信息
buf[recvbytes] = '\0';//字符串结尾赋0
printf("receive data is: %s\n",buf);
if (strstr(buf,":")!=NULL)//在命令消息串中找字符,协议中遇":"结束
{close(sockfd); return 1;}
if (strstr(buf,">")!=NULL)//在命令消息串中找字符,协议中遇":"结束
{break; }
}
close(sockfd);
return 0;
}