您的位置:首页 > 其它

stock 服务器 客服端

2011-07-01 00:00 134 查看
Server.exePortNumber,例如Server8000

Client.exeIPAddressPortNumber,例如Client127.0.0.18000

然后在客户端的命令行输入字符串并回车,客户端将会把消息发送到服务器,服务器再把消息传回客户端。

标签:
Socket

代码片段(2)

[代码]服务器端,Server.cpp

01//Server.cpp
02#include<winsock2.h>
03#include<stdio.h>
04#include<windows.h>
05#pragmacomment(lib,"ws2_32.lib")
06intmain(intargc,char*argv[]){
07//判断是否输入了端口号
08if(argc!=2){
09printf("Usage:%sPortNumber\n",argv[0]);
10exit(-1);
11}
12//把端口号转化成整数
13shortport;
14if((port=atoi(argv[1]))==0){
15printf("端口号有误!");
16exit(-1);
17}
18WSADATAwsa;
19//初始化套接字DLL
20if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
21printf("套接字初始化失败!");
22exit(-1);
23}
24//创建套接字
25SOCKETserverSocket;
26if((serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
27printf("创建套接字失败!");
28exit(-1);
29}
30structsockaddr_inserverAddress;
31memset(&serverAddress,0,sizeof(sockaddr_in));
32serverAddress.sin_family=AF_INET;
33serverAddress.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
34serverAddress.sin_port=htons(port);
35//绑定
36if(bind(serverSocket,(sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR){
37printf("套接字绑定到端口失败!端口:%d\n",port);
38exit(-1);
39}
40//进入侦听状态
41if(listen(serverSocket,SOMAXCONN)==SOCKET_ERROR){
42printf("侦听失败!");
43exit(-1);
44}
45printf("Server%dislistening......\n",port);
46SOCKETclientSocket;//用来和客户端通信的套接字
47structsockaddr_inclientAddress;//用来和客户端通信的套接字地址
48memset(&clientAddress,0,sizeof(clientAddress));
49intaddrlen=sizeof(clientAddress);
50//接受连接
51if((clientSocket=accept(serverSocket,(sockaddr*)&clientAddress,&addrlen))==INVALID_SOCKET){
52printf("接受客户端连接失败!");
53exit(-1);
54}
55printf("Acceptconnectionfrom%s\n",inet_ntoa(clientAddress.sin_addr));
56charbuf[4096];
57while(1){
58//接收数据
59intbytes;
60if((bytes=recv(clientSocket,buf,sizeof(buf),0))==SOCKET_ERROR){
61printf("接收数据失败!\n");
62exit(-1);
63}
64buf[bytes]='\0';
65printf("Messagefrom%s:%s\n",inet_ntoa(clientAddress.sin_addr),buf);
66if(send(clientSocket,buf,bytes,0)==SOCKET_ERROR){
67printf("发送数据失败!");
68exit(-1);
69}
70
71}
72//清理套接字占用的资源
73WSACleanup();
74return0;
75}

[代码]客户端,Client.cp

01//Client.cpp
02#include<winsock2.h>
03#include<stdio.h>
04#include<windows.h>
05#pragmacomment(lib,"ws2_32.lib")
06
07intmain(intargc,char*argv[]){
08//判断是否输入了IP地址和端口号
09if(argc!=3){
10printf("Usage:%sIPAddressPortNumber\n",argv[0]);
11exit(-1);
12}
13//把字符串的IP地址转化为u_long
14unsignedlongip;
15if((ip=inet_addr(argv[1]))==INADDR_NONE){
16printf("不合法的IP地址:%s",argv[1]);
17exit(-1);
18}
19//把端口号转化成整数
20shortport;
21if((port=atoi(argv[2]))==0){
22printf("端口号有误!");
23exit(-1);
24}
25printf("Connectingto%s:%d......\n",inet_ntoa(*(in_addr*)&ip),port);
26WSADATAwsa;
27//初始化套接字DLL
28if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
29printf("套接字初始化失败!");
30exit(-1);
31}
32//创建套接字
33SOCKETsock;
34if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
35printf("创建套接字失败!");
36exit(-1);
37}
38structsockaddr_inserverAddress;
39memset(&serverAddress,0,sizeof(sockaddr_in));
40serverAddress.sin_family=AF_INET;
41serverAddress.sin_addr.S_un.S_addr=ip;
42serverAddress.sin_port=htons(port);
43//建立和服务器的连接
44if(connect(sock,(sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR){
45printf("建立连接失败!");
46exit(-1);
47}
48charbuf[4096];
49while(1){
50printf(">");
51//从控制台读取一行数据
52gets(buf);
53//发送给服务器
54if(send(sock,buf,strlen(buf),0)==SOCKET_ERROR){
55printf("发送数据失败!");
56exit(-1);
57}
58intbytes;
59if((bytes=recv(sock,buf,sizeof(buf),0))==SOCKET_ERROR){
60printf("接收数据失败!\n");
61exit(-1);
62}
63buf[bytes]='\0';
64printf("Messagefrom%s:%s\n",inet_ntoa(serverAddress.sin_addr),buf);
65
66}
67//清理套接字占用的资源
68WSACleanup();
69return0;
70}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stock