下面是个人用了一个40分钟左右的时间编写的程序,在这编写过程中,非常重要的一点就是: 要理解 tcp协议编写程序的原理,即编写服务器端的过程,以及编写客户端的过程。 只要把握这两点就可以很容易编写出来了,但是要快速编写出这个程序,那么vc6.0开发工具里,最好要安装一个番茄插件,这个插件可以快速提高你的编写程序的效率,还有也要安装msdn 文档,这样在编写过程中,遇到对某个函数的参数想不全的时候,使用msdn就能快速帮你回忆了。 呵呵,如果你那一天去面试一家**的公司的哇,很有可能就是 在笔试完成之后,就要进行机试了,这就完全考查出你的真正编程水平了。 能在极短时间里完成一个socket网络程序,那么就可以令面试官感到非常满意了。 不过,这个程序,还没有连接数据库,以后再继续搞了。 如果你去面试 深圳科技园 那家 伟易达 集团公司的软件工程师的哇,那么机试题目就是这个。 当时我去面试,首先进行笔试,面试官对我笔试成绩比较满意,所以就叫我留下来吃顿饭,下午进行机试。 当时我应聘岗位是linux系统工程师c语言, 可是笔试题目,不但考核c,还考核c++,j**ascript,html。 我感觉好奇怪,心里想,好像我是应聘vc++开发那个岗位了。 于是我等到下午,他拿来机试题目之时,才真正明白,果然是他要安排我从事vc++开发了,题目就是:编写基于tcp/ip协议网络程序,并实现简单的聊天程序,而且要连接数据库。 当时我又失望了。 于是我就提出,我不想做这个题目,因为我是想应聘linux系统c语言开发的。 就这样失望的走了。 下面是个人完全能运行的代码: 服务器端源码: #include<stdio.h>#include <winsock2.h>#pragma comment (lib,"ws2_32.lib") int main(){ word wversionrequested; wsadata wsadata; int err; wversionrequested = makeword( 2, 2 ); err = wsastartup( wversionrequested, &wsadata ); if ( err != 0 ) { return 0; }if ( lobyte( wsadata.wversion ) != 2 || hibyte( wsadata.wversion ) != 2 ) { wsacleanup( ); return 0; } socket socketserver=socket(af_inet,sock_stream,0); sockaddr_in addrserver; addrserver.sin_family=af_inet; addrserver.sin_addr.s_un.s_addr=htonl(inaddr_any); addrserver.sin_port=htons(6000); bind(socketserver, (struct sockaddr *)&addrserver, sizeof(struct sockaddr)); l**ten(socketserver, 5); sockaddr_in addrclient; int addrlen=sizeof(sockaddr_in); char sendbuf[100]; char recvbuf[100]; int i=1; while(1) { printf("服务器端等待第%d个客户端连接请求...\n", i++); socket newsocketserver=accept(socketserver,(struct sockaddr *)&addrclient, &addrlen); if(newsocketserver!=invalid_socket) { printf("服务器端与客户端连接成功...\n"); } memset(sendbuf,0,100); sprintf(sendbuf,"welcome you to come here"); send(newsocketserver, sendbuf, strlen(sendbuf)+1,0); memset(recvbuf,0,100); recv(newsocketserver,recvbuf,100,0); printf("服务器端收到信息:%s\n",recvbuf); closesocket(newsocketserver); } wsacleanup(); return 0;} 此文章来自于个人博客: 阿浪博客 客户端源码: #include<stdio.h>#include <winsock2.h>#pragma comment (lib,"ws2_32.lib") int main(){ word wversionrequested; wsadata wsadata; int err; wversionrequested = makeword( 2, 2 ); err = wsastartup( wversionrequested, &wsadata ); if ( err != 0 ) { return 0; }if ( lobyte( wsadata.wversion ) != 2 || hibyte( wsadata.wversion ) != 2 ) { wsacleanup( ); return 0; } socket socketclient=socket(af_inet,sock_stream,0); sockaddr_in addrserver; addrserver.sin_family=af_inet; addrserver.sin_addr.s_un.s_addr=inet_addr("127.0.0.1"); addrserver.sin_port=htons(6000); char sendbuf[100]; char recvbuf[100]; printf("客户端向服务器端连接请求...\n"); int **connect=connect(socketclient, (struct sockaddr *)&addrserver, sizeof(struct sockaddr)); if(**connect!=0) { printf("客户端无法连接服务器端...\n"); return 0; } printf("客户端已成功连接服务器端...\n"); memset(recvbuf,0,100); recv(socketclient,recvbuf,100,0); printf("客户端收到信息:%s\n",recvbuf); memset(sendbuf,0,100); sprintf(sendbuf,"hello , i am mr wen !"); send(socketclient, sendbuf, strlen(sendbuf)+1,0); closesocket(socketclient); wsacleanup(); return 0;} 20210311