TCP 留言板

来源:互联网 发布:矩阵归一化怎么计算 编辑:程序博客网 时间:2024/06/04 19:16

对于TCP的通信协议的原理,我不多说。网络上太多了,我也只是一个小菜。这里我贡献一下我那弱弱的代码!希望各位大神给予指点!

客服端:

#pragma warning(disable:4996)#include "winsock2.h"#include <iostream>#include <string>#pragma comment(lib,"WS2_32.lib")using namespace std;int Client_Port(char * ip){WSADATA data;WORD w = MAKEWORD(2,0);  //定义版本号::WSAStartup(w,&data);SOCKET s;char sztext[2048];s = ::socket(AF_INET,SOCK_STREAM,0);   //创建TCP套接字sockaddr_in addr;addr.sin_family = AF_INET;    //初始化套接字addr.sin_port = htons(8010);addr.sin_addr.S_un.S_addr = inet_addr(ip);::connect(s,(sockaddr*)&addr,sizeof(addr));  //发送到服务器string name;cout<<"名字:";::send(s,"名字:",sizeof("名字:"),0);cin>>name;char *name_st = new char[name.length()+2];strcpy(name_st,name.c_str());name_st[name.length()] = '\n';name_st[name.length() + 1] = '\0';::send(s,name_st,name.length()+2,0);string content;cout<<"留言信息:";::send(s,"留言信息:",sizeof("留言信息:"),0);cin>>content;char * content_st = new char[content.length() + 1];strcpy(content_st,content.c_str());::send(s,content_st,content.length() + 1,0);::recv(s,sztext,sizeof(sztext),0);   //接受服务器端的信息std::cout<<sztext<<"\r"<<endl;::closesocket(s);::WSACleanup();return 0;}int main(){std::cout<<"客服端已经启动!!!"<<endl;char ip[16];cout<<"请输入IP地址:";cin>>ip;Client_Port(ip);while(1);return 0;}


服务器端:

// Sever_chat.cpp : 定义控制台应用程序的入口点。//#pragma warning(disable:4996)#include <iostream>#include <string>#include <winsock2.h>#include <conio.h>#include <fstream>#pragma comment(lib,"WS2_32.lib")using namespace std;int Server_Side(){WSADATA data;WORD w = MAKEWORD(2,0);::WSAStartup(w,&data);string sztext = "留言完毕!";SOCKET s,s1;s = ::socket(AF_INET,SOCK_STREAM,0); //创建套接字sockaddr_in addr,addr2;int n = sizeof(addr2);addr.sin_family = AF_INET;addr.sin_port = htons(8010);  //端口号addr.sin_addr.S_un.S_addr = INADDR_ANY;  //任意地址::bind(s,(sockaddr*)&addr,sizeof(addr));  //绑定套接字::listen(s,5);cout<<"等待连接!"<<endl;s1 = ::accept(s,(sockaddr*)&addr2,&n);     //接受客服端的链接请求char * szText;szText = new char[sztext.length() + 1];strcpy(szText,sztext.c_str());if(s1 != NULL){cout<<inet_ntoa(addr2.sin_addr)<<"已经连接上了"<<endl;::send(s1,szText,sztext.length()+1,0);}char ch[5] = {};char filename[] = "留言板.txt";ofstream fout(filename,ios::app);while(recv(s1,ch,sizeof(ch),0) > 0){for(int i = 0;i < 5 &&ch[i] != '\0';i++){putchar(ch[i]);fout<<ch[i];}}cout<<endl;::closesocket(s); ::closesocket(s1);::WSACleanup();return 0;}int main(void){cout<<"服务器已经启动"<<endl;while(true){Server_Side();if(kbhit()){char ch;cout<<"选择是否结束服务(Y/N)?"<<endl;cin>>ch;switch (ch){case 'Y':case 'y': goto loop;    //跳出循环到loop处default:break;}}}loop:           //goto跳出点return 0;}

0 0
原创粉丝点击