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
- TCP 留言板
- 留言板!
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- 留言板
- VS2012发布网站详细步骤
- 登录和退出时shell的执行顺序
- innodb 相关注意事项整理
- 一条语句查看你的数据库是哪个版本
- Sencha touch 2 入门 -------- DataView 显示服务器端JSON文件数据
- TCP 留言板
- HTML Email 编写指南
- 三角类1---周长与面积
- Dapper ORM 用法—Net下无敌的ORM
- 我在面试时问到的问题 或许对你有帮助
- Stanford机器学习---第九讲. 聚类
- [C语言基础]C学习笔记(一)
- Android回顾之延迟执行
- 逆波兰表达式的求解