如何开发网络通信应用程序
解决方案 »
- 图片失真的问题。急啊!!!
- 关于shellExecute的问题
- 如何实现视频聊天。
- 怎样在程序里将图片的大小(width和height)改变?
- findfirst 和 findnext 对中文路径失灵!!
- 在哪里设置DELPHI 7的快捷键????????????????????????
- 我打开unit3运行,但运行却是unit1?不知怎改为运行unit3
- 请教一下TComboBox的使用?
- 请问delph有没有换行符
- 关于delphi希奇古怪的问题?
- 用什么方法能实现进程防杀啊?
- 在DELPHI中如何调用一个ACCESS表,比如在table中,DATABASENAME中设定了ACCESS表的路径,如D:\CG,但在TABLE中的TABLENAME中却找不ACCESS表的
{
fprintf(stderr, "Socket failed !!\n");
return(-1);
}
bzero((char *)&serv_addr, sizeof(serv_addr));/*服务器地址清0*/
serv_addr.sin_family = AF_INET;/*网络类型使用ARPA internet地址*/
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
/*IP地址取公认的任意合法地址*/
serv_addr.sin_port = htons(1234);
/*设定IP端口号, 并将主机字节顺序转换为网络字节顺序*/ if ( bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0 )/*将服务器地址信息捆绑到创建的套接字上*/
{
fprintf(stderr, "Bind failed !!\n");
return(-1);
} if ( listen(sockfd, 5) < 0 )/*建立长度为5的监听队列从套接字上收听连接请求*/
{
fprintf(stderr, "Listen failed !!\n");
return(-1);
}
fprintf(stderr, "blocked here.....\n"); clilen = sizeof(cli_addr);
/*阻塞至客户方有连接请求到来*/
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
/*有连接请求时, 返回被赋予客户机地址的新套接字, 连接已建立*/fprintf(stderr, "connected now!!!\n");
if ( newsockfd < 0 )
{
fprintf(stderr, "Accept failed!!\n");
return(-1);
}
shutdown(sockfd, 2);
close(sockfd);
memset(info,0,sizeof(info));
infolen=6;
if ((rc=TCPRECEIVE(newsockfd, info, infolen)) == -1)/*接受客户机发来的信息*/
fprintf(stderr, "TCPRecv failed !!\n"); if (!memcmp(info,"123456",6))
{/*返回帐号为123456的帐户信息*/
printf("received account no is %6.6s\n",info);
sprintf(info,"%6.6s|%8.8s|%10.2lf",info,"zhang li",123.456);
}
else{/*否则, 返回000000表示无此帐户*/
printf("no such account no %6.6s\n",info);
sprintf(info,"%6.6s|%8.8s|%lf","000000","",0.0);
}
infolen=sizeof(info);
if ((rc=TCPSEND(newsockfd, info, infolen) )== -1) /*向客户机发送该帐户信息*/
fprintf(stderr, "TCPSend failed !!\n"); shutdown(newsockfd, 2);
close(newsockfd);}
/*客户端程序:hxclient.c*/
#include
#include
#include
#include
#include "tcpipop.c" typedef struct{
char accno[7];
char name[9];
double amt;
} data_type;
/* 帐户数据结构 */main(argc,argv)int argc;
char ** argv;
{
int i=0;
int sockfd;
struct sockaddr_in serv_addr;/*存服务器方的地址*/
char info[100];
int infolen;
data_type data;
int rc; if (argc!=2)
{
fprintf(stderr,"client ipaddress\n");
exit(-1);
}
/*参数是服务器的IP地址*/ for ( ; i<10; i++ )/*最多连接10次*/
{
bzero((char *)&serv_addr, sizeof(serv_addr));
/*服务器地址变量清0*/ serv_addr.sin_family = AF_INET;
/*网络地址类型使用ARPA internet 地址*/
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
/*服务器IP地址转换为长整型IP地址, 并赋予地址结构变量*/serv_addr.sin_port=htons(1234);
/*与服务器相同的IP端口号, 经主机字节顺序到网络字节顺序的转换*/
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
/*创建TCP协议的字节流套接字*/
{
fprintf(stderr, "Client : Can not open stream socket\n");
shutdown(sockfd, 2);
close(sockfd);
return(-1);
}
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) >= 0)
/*与服务进程建立连接*/
break;
shutdown(sockfd, 2);
close(sockfd);
} if ( i >= 10 )
exit(-1);
/*此时连接已建立, 可通过对套接字的读写实现通信*/memset(&data,0,sizeof(data));
printf("enter account no:");
scanf("%s",data.accno); /*输入要检索的帐号*/ infolen=sizeof(data.accno);
bcopy(&data.accno,info,infolen);
if ( (rc=TCPSEND(sockfd, info, infolen)) == -1 )
fprintf(stderr, "TCPSend failed !!\n");
/*客户进程向服务进程发送帐号信息*/
infolen=sizeof(info);
if ( (rc=TCPRECEIVE(sockfd, info, infolen)) == -1 )
fprintf(stderr, "TCPRecv failed !!\n");
/*客户进程接收服务进程返回的帐户信息*/ sscanf(info,"%[^|]|%[^|]|%lf",data.accno,data.name,&data.amt); /*格式转换*/if (!memcmp(data.accno,"000000",6))/*判断是否查到*/
printf("There is no such account in server database.\n");
else {/*显示帐户信息*/
printf("accno is %s\n",data.accno);
printf("name is %s\n",data.name);
printf("amount is %-10.2lf\n",data.amt);
}
shutdown(sockfd, 2);
close(sockfd);
}/*公共程序:tcpipop.c*/
/*
* Using TCP/IP Protocol.
*/#include
#include
#include
#include
#include extern int TCPSEND(int fd, char *buf, int len)
{
int i=0;
int send_rc; for ( ; i<10; i++ ) {send_rc = write( fd, buf, len );
if ( send_rc == len )
break;
sleep(1);
} if ( i >= 10 )
return(-1);
else
return(send_rc);
}
extern int TCPRECEIVE(int fd, char *buf, int len)
{
int i=0;
int receive_rc; for ( ; i<10; i++ ) { receive_rc = read(fd, buf, len); if ( receive_rc == len )
break;
sleep(1);
} if ( i >= 10 )
return(-1);
else
return(receive_rc);
}
{
fprintf(stderr, "Socket failed !!\n");
return(-1);
}
bzero((char *)&serv_addr, sizeof(serv_addr));/*服务器地址清0*/
serv_addr.sin_family = AF_INET;/*网络类型使用ARPA internet地址*/
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
/*IP地址取公认的任意合法地址*/
serv_addr.sin_port = htons(1234);
/*设定IP端口号, 并将主机字节顺序转换为网络字节顺序*/ if ( bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0 )/*将服务器地址信息捆绑到创建的套接字上*/
{
fprintf(stderr, "Bind failed !!\n");
return(-1);
} if ( listen(sockfd, 5) < 0 )/*建立长度为5的监听队列从套接字上收听连接请求*/
{
fprintf(stderr, "Listen failed !!\n");
return(-1);
}
fprintf(stderr, "blocked here.....\n"); clilen = sizeof(cli_addr);
/*阻塞至客户方有连接请求到来*/
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
/*有连接请求时, 返回被赋予客户机地址的新套接字, 连接已建立*/fprintf(stderr, "connected now!!!\n");
if ( newsockfd < 0 )
{
fprintf(stderr, "Accept failed!!\n");
return(-1);
}
shutdown(sockfd, 2);
close(sockfd);
memset(info,0,sizeof(info));
infolen=6;
if ((rc=TCPRECEIVE(newsockfd, info, infolen)) == -1)/*接受客户机发来的信息*/
fprintf(stderr, "TCPRecv failed !!\n"); if (!memcmp(info,"123456",6))
{/*返回帐号为123456的帐户信息*/
printf("received account no is %6.6s\n",info);
sprintf(info,"%6.6s|%8.8s|%10.2lf",info,"zhang li",123.456);
}
else{/*否则, 返回000000表示无此帐户*/
printf("no such account no %6.6s\n",info);
sprintf(info,"%6.6s|%8.8s|%lf","000000","",0.0);
}
infolen=sizeof(info);
if ((rc=TCPSEND(newsockfd, info, infolen) )== -1) /*向客户机发送该帐户信息*/
fprintf(stderr, "TCPSend failed !!\n"); shutdown(newsockfd, 2);
close(newsockfd);}
/*客户端程序:hxclient.c*/
#include
#include
#include
#include
#include "tcpipop.c" typedef struct{
char accno[7];
char name[9];
double amt;
} data_type;
/* 帐户数据结构 */main(argc,argv)int argc;
char ** argv;
{
int i=0;
int sockfd;
struct sockaddr_in serv_addr;/*存服务器方的地址*/
char info[100];
int infolen;
data_type data;
int rc; if (argc!=2)
{
fprintf(stderr,"client ipaddress\n");
exit(-1);
}
/*参数是服务器的IP地址*/ for ( ; i<10; i++ )/*最多连接10次*/
{
bzero((char *)&serv_addr, sizeof(serv_addr));
/*服务器地址变量清0*/ serv_addr.sin_family = AF_INET;
/*网络地址类型使用ARPA internet 地址*/
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
/*服务器IP地址转换为长整型IP地址, 并赋予地址结构变量*/serv_addr.sin_port=htons(1234);
/*与服务器相同的IP端口号, 经主机字节顺序到网络字节顺序的转换*/
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
/*创建TCP协议的字节流套接字*/
{
fprintf(stderr, "Client : Can not open stream socket\n");
shutdown(sockfd, 2);
close(sockfd);
return(-1);
}
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) >= 0)
/*与服务进程建立连接*/
break;
shutdown(sockfd, 2);
close(sockfd);
} if ( i >= 10 )
exit(-1);
/*此时连接已建立, 可通过对套接字的读写实现通信*/memset(&data,0,sizeof(data));
printf("enter account no:");
scanf("%s",data.accno); /*输入要检索的帐号*/ infolen=sizeof(data.accno);
bcopy(&data.accno,info,infolen);
if ( (rc=TCPSEND(sockfd, info, infolen)) == -1 )
fprintf(stderr, "TCPSend failed !!\n");
/*客户进程向服务进程发送帐号信息*/
infolen=sizeof(info);
if ( (rc=TCPRECEIVE(sockfd, info, infolen)) == -1 )
fprintf(stderr, "TCPRecv failed !!\n");
/*客户进程接收服务进程返回的帐户信息*/ sscanf(info,"%[^|]|%[^|]|%lf",data.accno,data.name,&data.amt); /*格式转换*/if (!memcmp(data.accno,"000000",6))/*判断是否查到*/
printf("There is no such account in server database.\n");
else {/*显示帐户信息*/
printf("accno is %s\n",data.accno);
printf("name is %s\n",data.name);
printf("amount is %-10.2lf\n",data.amt);
}
shutdown(sockfd, 2);
close(sockfd);
}/*公共程序:tcpipop.c*/
/*
* Using TCP/IP Protocol.
*/#include
#include
#include
#include
#include extern int TCPSEND(int fd, char *buf, int len)
{
int i=0;
int send_rc; for ( ; i<10; i++ ) {send_rc = write( fd, buf, len );
if ( send_rc == len )
break;
sleep(1);
} if ( i >= 10 )
return(-1);
else
return(send_rc);
}
extern int TCPRECEIVE(int fd, char *buf, int len)
{
int i=0;
int receive_rc; for ( ; i<10; i++ ) { receive_rc = read(fd, buf, len); if ( receive_rc == len )
break;
sleep(1);
} if ( i >= 10 )
return(-1);
else
return(receive_rc);
}
fprintf(stderr, "Accept failed!!\n");
return(-1);
}
shutdown(sockfd, 2);
close(sockfd);
memset(info,0,sizeof(info));
infolen=6;
if ((rc=TCPRECEIVE(newsockfd, info, infolen)) == -1)/*接受客户机发来的信息*/
fprintf(stderr, "TCPRecv failed !!\n"); if (!memcmp(info,"123456",6))
{/*返回帐号为123456的帐户信息*/
printf("received account no is %6.6s\n",info);
sprintf(info,"%6.6s|%8.8s|%10.2lf",info,"zhang li",123.456);
}
else{/*否则, 返回000000表示无此帐户*/
printf("no such account no %6.6s\n",info);
sprintf(info,"%6.6s|%8.8s|%lf","000000","",0.0);
}
infolen=sizeof(info);
if ((rc=TCPSEND(newsockfd, info, infolen) )== -1) /*向客户机发送该帐户信息*/
fprintf(stderr, "TCPSend failed !!\n"); shutdown(newsockfd, 2);
close(newsockfd);}
/*客户端程序:hxclient.c*/
#include
#include
#include
#include
#include "tcpipop.c" typedef struct{
char accno[7];
char name[9];
double amt;
} data_type;
/* 帐户数据结构 */main(argc,argv)int argc;
char ** argv;
{
int i=0;
int sockfd;
struct sockaddr_in serv_addr;/*存服务器方的地址*/
char info[100];
int infolen;
data_type data;
int rc; if (argc!=2)
{
fprintf(stderr,"client ipaddress\n");
exit(-1);
}
/*参数是服务器的IP地址*/ for ( ; i<10; i++ )/*最多连接10次*/
{
bzero((char *)&serv_addr, sizeof(serv_addr));
/*服务器地址变量清0*/ serv_addr.sin_family = AF_INET;
/*网络地址类型使用ARPA internet 地址*/
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
/*服务器IP地址转换为长整型IP地址, 并赋予地址结构变量*/