Skip to content

Instantly share code, notes, and snippets.

@myisjon
Last active November 14, 2017 22:46
Show Gist options
  • Save myisjon/9658276 to your computer and use it in GitHub Desktop.
Save myisjon/9658276 to your computer and use it in GitHub Desktop.
#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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment