P2P程序内容

P2P程序内容
P2P程序内容

P2P通讯程序说明

◆◆◆作者◆◆◆

◆◆◆日期◆◆◆

2012-04-15 16:44:13

◆◆◆开发平台◆◆◆

VC++ 6.0 (MFC)

◆◆◆运行环境◆◆◆

Windows XP

本程序分别运用TCP与UDP连接方式对通讯程序功能进行实现。具体功能为:可以实现像QQ一样的通过网络互发文件、抓取对方屏幕并保存。程序还可以取得对方和本机的IP地址、计算机名和文字太多时出现ListBox控件滚动条等功能。

由于功能上(非界面上)类似QQ的的程序,所以部分功能参考的类QQ程序源码。

程序开始时的运行截图:

设置项目为:

功能项目为:

抓取对方屏幕

显示IP

开始时是默认显示的自己的IP地址,为亮色可修改

选择服务选择设置后,启动变为灰色目的显示对方IP

发送信息

默认为:你好PC--20120224BAZ! 可随意

显示信息

传输文件

一台计算机测试时。

开始运行必须有台主机为服务器选择后有(这里以TCP方式为例)

然后另一台为客户端。

之所以不能一台计算机两个客户端,原因是:两个IP相同。*注意*:

不同计算机测试时,都关闭防火墙。

这里开始解释程序中的代码。

由于此程序所有互动都是基于对话框上空间进行的,所以几乎所有代码都将从这个CMyQQDlg类中生成的。

◆◆◆线程◆◆◆

◆◆◆服务器线程开始◆◆◆

//TCP监听线程

UINT _ListenTcpThread(LPVOID lparam)

{

CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

if(pDlg->StopServer==true) return -1;

CSocket sockSrvr;

pDlg->m_Potr=PORT+pDlg->m_server;//保存当前使用端口,用于关闭

int createSucceed=sockSrvr.Create(pDlg->m_Potr);

if(createSucceed==0)

{

AfxMessageBox("_ListenTcpThread Create错误!"+pDlg->GetError(GetLastError()));

return -1;

}

int listenSucceed=sockSrvr.Listen(); //开始监听

if(listenSucceed==0)

{

AfxMessageBox("_ListenTcpThread Listen错误!"+pDlg->GetError(GetLastError()));

return -1;

}

CSocket recSo;

SOCKADDR_IN client;

int iAddrSize=sizeof(client);

int acceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR *)&client,&iAddrSize); //接受连接并取得对方IP

if(acceptSucceed==0)

{

AfxMessageBox("_ListenTcpThread Accept错误!"+pDlg->GetError(GetLastError()));

return -1;

}

sockSrvr.Close();

char flag[FLAG]={0};

if(recSo.Receive(flag,FLAG)!=2)

{

return -1;

}

pDlg->m_type=flag[0];

if(pDlg->m_type=='D') return 0;

pThreadLisen=::AfxBeginThread(_ListenTcpThread,pDlg);

pDlg->ReceiveFileMsg(recSo,client);

return 0;

}

UINT _UDPThread(LPVOID lparam) /////UDP接受信息线程开始

{

CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

if(pDlg->StopServer==true) return -1;

CSocket sockSrvrUdp;

sockSrvrUdp.Create(PORT+pDlg->m_client,SOCK_DGRAM);

char buff[100]={0};

int ret=0;

CString ipStr;

CString msg;

UINT port;

for(;;)

{

ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值

if(buff[0]=='D') return 0;

if(ret==SOCKET_ERROR)

{

break;

}

msg.Format(buff);

pDlg->AddMsgList(ipStr,msg);

}

sockSrvrUdp.Close();

return 0;

}

////////////////////////////////////服务器线程结束//////////////////////////////////////

◆◆◆客户端线程开始◆◆◆

//发送文件线程

UINT _SendFileThread(LPVOID lparam)

{

CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

if(pDlg->StopServer==true) return -1;

CSocket sockClient;

sockClient.Create();

CString ip;

pDlg->m_Y ou_IP.GetWindowText(ip);

sockClient.Connect(ip, PORT+pDlg->m_client);

//首先发送标记F为文件,2

int end=0;

end=sockClient.Send("F",FLAG);

///////////////////////////////////////////////////////////////////发送标志是否成功

if(end==SOCKET_ERROR)

{

AfxMessageBox("_SendFileThread Send错误!"+pDlg->GetError(GetLastError()));

return -1;

}

else if(end!=2)

{

AfxMessageBox("文件头错误");

return -1;

}

///////////////////////////////////////////////////////////////////

CFile myFile;

FILEINFO myFileInfo;

if(!myFile.Open(pDlg->m_fileName, CFile::modeRead | CFile::typeBinary))

return -1;

myFileInfo.fileLength=myFile.GetLength(); //得到文件大小

strcpy(myFileInfo.fileName,myFile.GetFileName());//得到文件名称

sockClient.Send(&myFileInfo,sizeof(myFileInfo)); //发送文件信息

pDlg->m_Progress.SetRange32(0,myFileInfo.fileLength);

myFile.Seek(0,CFile::begin);

char m_buf[SIZEFILE]={0};

CString strError;

int num=0;

end=0;

int temp=0;

pDlg->GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(true );

for(;;)

{

if(pDlg->FileWork==false)

{

pDlg->FileWork=true;

pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);

pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false) ;

}

num=myFile.Read(m_buf, SIZEFILE);

if(num==0) break;

end=sockClient.Send(m_buf, num);

temp+=end;

pDlg->m_Progress.SetPos(temp);

if(pDlg->FileStop==true)

{

pDlg->FileStop=false;

pDlg->FileWork=false;

break;

}

if(end==SOCKET_ERROR)

{

AfxMessageBox("_SendFileThread Send错误!"+pDlg->GetError(GetLastError()));

break;

}

}

pDlg->m_Progress.SetPos(0);

CString strLocalName;

pDlg->GetLocalHostName(strLocalName);

CString strLocalIP;

pDlg->GetIpAddress(strLocalName,strLocalIP);

if(temp==myFileInfo.fileLength)

pDlg->AddMsgList(strLocalIP+"->"+strLocalName,"文件发送成功");

else

pDlg->AddMsgList(strLocalIP+"->"+strLocalName,"文件发送失败");

myFile.Close();

sockClient.Close();

pDlg->FileWork=false;

pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(S W_HIDE);

pDlg->GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(fals e);

pDlg->GetDlgItem(IDCANCEL)->EnableWindow(true);

pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(t rue);

return 0;

}

UINT _SendMsgThread(LPVOID lparam) //TCP发送信息线程

{

CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

if(pDlg->StopServer==true) return -1;

CSocket sockClient;

sockClient.Create();

CString ip,strError;

pDlg->m_Y ou_IP.GetWindowText(ip);

int conn=sockClient.Connect(ip, PORT+pDlg->m_client);

if(conn==0) ///////////////////////////////////

{

AfxMessageBox("_SendMsgThread Connect错误!"+pDlg->GetError(GetLastError()));

sockClient.ShutDown(2);

sockClient.Close();

AfxEndThread(1L);

return 0;

}

//首先发送标记M为信息,2

int end=0;

end=sockClient.Send("M",FLAG);

if(end==SOCKET_ERROR)

{

AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));

return -1;

}

else if(end!=2)

{

AfxMessageBox("消息头错误");

return -1;

}

CString strMsg=pDlg->m_MsgSend;

end=sockClient.Send(strMsg,strMsg.GetLength());

if(end==SOCKET_ERROR)

{

AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));

return -1;

}

CString strLocalName;

pDlg->GetLocalHostName(strLocalName);

CString strLocalIP;

pDlg->GetIpAddress(strLocalName,strLocalIP);

pDlg->AddMsgList(strLocalIP+"->"+strLocalName,strMsg);

int i=0;

sockClient.Close();

return 0;

}

UINT _ThreadCapture(LPVOID lparam) //抓取对方屏幕线程

{

CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

if(pDlg->StopServer==true) return -1;

CSocket sockClient;

sockClient.Create();

CString ip;

pDlg->m_Y ou_IP.GetWindowText(ip);

sockClient.Connect(ip, PORT+pDlg->m_client);

//首先发送标记C为抓取,2

int end=0;

end=sockClient.Send("C",FLAG);

///////////////////////////////////////////////////////////////////发送标志是否成功

if(end==SOCKET_ERROR)

{

AfxMessageBox("_ThreadCapture Send错误!"+pDlg->GetError(GetLastError()));

return -1;

}

else if(end!=2)

{

AfxMessageBox("发送头错误");

return -1;

}

return 0;

}

///////////////////////////////////////////////////////////////////

UINT _SendMsgUdpThread(LPVOID lparam) //UDP发送信息

{

CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

if(pDlg->StopServer==true) return -1;

CSocket sockClientUdp;

pDlg->m_type=PORT+pDlg->m_client+10;

sockClientUdp.Create(pDlg->m_type,SOCK_DGRAM);

CString strMsg=pDlg->m_MsgSend;

int ret=0;

CString ipStr;

pDlg->m_Y ou_IP.GetWindowText(ipStr);

UINT port=PORT+pDlg->m_server;

ret=sockClientUdp.SendTo(strMsg,strMsg.GetLength(),port,ipStr);

if(ret==SOCKET_ERROR)

{

DWORD error=GetLastError();

}

CString strLocalName;

pDlg->GetLocalHostName(strLocalName);

CString strLocalIP;

pDlg->GetIpAddress(strLocalName,strLocalIP);

pDlg->AddMsgList(strLocalIP+"->"+strLocalName,strMsg);

sockClientUdp.Close();

return 0;

}

////////////////////////////////////客户端线程结束//////////////////////////////////////

◆◆◆函数◆◆◆

int CMyQQDlg::ReceiveFileMsg(CSocket &recSo,SOCKADDR_IN &client)//接受函数

{

// if(StopServer==true) return -1;

if(m_type=='C') //抓取

{

SaveY ouScreen(CopyScreenToBitmap(),client);//发送地址}

else if(m_type=='F') //文件

{

SaveY ouFile(recSo,client);

}

else if(m_type=='M') //信息

{

char buff[100]={0};

CString msg;

int ret=0;

for(;;)

{

ret=recSo.Receive(buff,100);

if(ret==0)

break;

msg+=buff;

}

CString strOut,strIn;

m_Y ou_IP.GetWindowText(strIn);

GetNamebyAddress(strIn,strOut);

CString youName;

youName.Format(inet_ntoa(client.sin_addr));

CString str=youName+"<-"+strOut;

AddMsgList(str,msg);

}

recSo.Close();

return 0;

}

HBITMAP CMyQQDlg::CopyScreenToBitmap()

{

CRect

rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCRE EN));

HDC hScrDC,hMemDC; // 屏幕和内存设备描述表

HBITMAP hBitmap, hOldBitmap;// 位图句柄

int xScrn, yScrn; // 屏幕分辨率

hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); //为屏幕创建设备描述表

hMemDC = CreateCompatibleDC(hScrDC);//为屏幕设备描述表创建兼容的内存设备描述表

xScrn = GetDeviceCaps(hScrDC, HORZRES);// 获得屏幕分辨率

yScrn = GetDeviceCaps(hScrDC, VERTRES);

hBitmap = CreateCompatibleBitmap(hScrDC, rect.Width(), rect.Height());// 创建一个与屏幕设备描述表兼容的位图

hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);// 把新位图选到内存设备描述表中

BitBlt(hMemDC, 0, 0, rect.Width(), rect.Height(),hScrDC,rect.left,rect.top, SRCCOPY);// 把屏幕设备描述表拷贝到内存设备描述表中

hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);//得到屏幕位图的句柄

DeleteDC(hScrDC);//清除

DeleteDC(hMemDC);

return hBitmap;// 返回位图句柄

}

void CMyQQDlg::SaveY ouScreen(HBITMAP hBitmap,SOCKADDR_IN &client)//接受屏幕

{

HDC hDC; //设备描述表

int iBits;//当前显示分辨率下每个像素所占字节数

WORD wBitCount;//位图中每个像素所占字节数

DWORD dwPaletteSize=0,//定义调色板大小

dwBmBitsSize,//位图中像素字节大小

dwDIBSize;//位图文件大小

BITMAP Bitmap;//位图属性结构

BITMAPFILEHEADER bmfHdr;//位图文件头结构

BITMAPINFOHEADER bi;//位图信息头结构

LPBITMAPINFOHEADER lpbi;//指向位图信息头结构

HANDLE hDib, hPal,hOldPal=NULL;//定义文件,分配内存句柄,调色板句柄

hDC = CreateDC("DISPLAY",NULL,NULL,NULL);

iBits = GetDeviceCaps(hDC, BITSPIXEL) *

GetDeviceCaps(hDC, PLANES);//计算位图文件每个像素所占字节数

DeleteDC(hDC);

if (iBits <= 1)

wBitCount = 1;

else if (iBits <= 4)

wBitCount = 4;

else if (iBits <= 8)

wBitCount = 8;

else if (iBits <= 24)

wBitCount = 24;

if (wBitCount <= 8)

dwPaletteSize = (1<

//设置位图信息头结构

GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);

bi.biSize = sizeof(BITMAPINFOHEADER);

bi.biWidth = Bitmap.bmWidth;

bi.biHeight = Bitmap.bmHeight;

bi.biPlanes = 1;

bi.biBitCount = wBitCount;

bi.biCompression = BI_RGB;

bi.biSizeImage = 0;

bi.biXPelsPerMeter = 0;

bi.biYPelsPerMeter = 0;

bi.biClrUsed = 0;

bi.biClrImportant = 0;

dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31)/32)* 4 *Bitmap.bmHeight ;

//为位图内容分配内存

hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEAD ER));

lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);

*lpbi = bi;

// 处理调色板

hPal = GetStockObject(DEFAULT_PALETTE);

if (hPal)

{

hDC=::GetDC(NULL);

hOldPal = SelectPalette(hDC,(HPALETTE)hPal, FALSE);

RealizePalette(hDC);

}

// 获取该调色板下新的像素值

GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,

(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)

+dwPaletteSize,

(BITMAPINFO*)

lpbi, DIB_RGB_COLORS);

//恢复调色板

if (hOldPal)

{

SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);

RealizePalette(hDC);

::ReleaseDC(NULL, hDC);

}

// 设置位图文件头

bmfHdr.bfType = 0x4D42; // "BM"

dwDIBSize = sizeof(BITMAPFILEHEADER)

+ sizeof(BITMAPINFOHEADER)

+ dwPaletteSize + dwBmBitsSize;

bmfHdr.bfSize = dwDIBSize;

bmfHdr.bfReserved1 = 0;

bmfHdr.bfReserved2 = 0;

bmfHdr.bfOffBits = (DWORD)sizeof

(BITMAPFILEHEADER)

+ (DWORD)sizeof(BITMAPINFOHEADER)

+ dwPaletteSize;

CSocket sockClient;

sockClient.Create();

sockClient.Connect(inet_ntoa(client.sin_addr), PORT+m_client); //连接到申请方

//首先发送标记F为文件,2

FILEINFO myFileInfo;

myFileInfo.fileLength=sizeof(BITMAPFILEHEADER)+dwDIBSize;//得到文件大小

strcpy(myFileInfo.fileName,"对方屏幕.bmp");//得到文件名称

sockClient.Send("F",FLAG);

sockClient.Send(&myFileInfo,sizeof(FILEINFO));

sockClient.Send(&bmfHdr, sizeof(BITMAPFILEHEADER));

sockClient.Send(lpbi, dwDIBSize);

GlobalUnlock(hDib);

GlobalFree(hDib);

}

int CMyQQDlg::SaveY ouFile(CSocket &recSo, SOCKADDR_IN &client)//接受文件

{

CString fname;

CFileDialog dlg(false); //另存文件

FILEINFO myFileInfo;

recSo.Receive(&myFileInfo,sizeof(FILEINFO));

int fileLength=myFileInfo.fileLength;

CString strfileIp,strfileName,strfileLength;

strfileIp.Format(inet_ntoa(client.sin_addr));

strfileName.Format(myFileInfo.fileName);

strfileLength.Format("%f",myFileInfo.fileLength/1024.0);

CString title="文件"+strfileName+" 大小"+strfileLength+"KB "+"来在"+strfileIp+" 是否接受";

dlg.m_ofn.lpstrTitle=title;//标题条

char fileme[500]={0};//必须足够大小

strcpy(fileme,strfileIp+strfileName);

dlg.m_ofn.lpstrFile=fileme; //文件名称

if(dlg.DoModal()==IDOK)

{

fname=dlg.GetPathName(); //得到文件名名称、路径GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_SHOW);

}

else

{

GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);

GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(false); GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);

GetDlgItem(IDCANCEL)->EnableWindow(true);

recSo.Close();

return 0;

}

char buf[SIZEFILE]={0};

CFile f(fname,CFile::modeCreate|CFile::modeWrite); //存文件

m_Progress.SetRange32(0,fileLength);

int n=0; //接受的字节数0表示结束

int temp=0;

GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(true);

GetDlgItem(IDCANCEL)->EnableWindow(false);

GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);

for(;;)

{

n=recSo.Receive(buf,SIZEFILE); //接受

if(n==0) //0表示结束

break; //接受完毕

f.Write(buf,n);

temp+=n;

m_Progress.SetPos(temp);

if(FileWork==false) FileWork=true;

if(FileStop==true)

{

FileStop=false;

FileWork=false;

break ;

}

}

f.Close();

m_Progress.SetPos(0);

if(temp==fileLength)

AddMsgList(inet_ntoa(client.sin_addr),"文件接受成功");

else

AddMsgList(inet_ntoa(client.sin_addr),"文件接受失败");

FileWork=false;

GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HID E);

GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(false);

GetDlgItem(IDCANCEL)->EnableWindow(true);

GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);

return 0;

}

CString CMyQQDlg::GetError(DWORD error) //返回错误信息

{

CString strError;

switch(error)

{

case WSANOTINITIALISED:

strError="初始化错误";

break;

case WSAENOTCONN:

strError="对方没有启动";

break;

case WSAEWOULDBLOCK :

strError="对方已经关闭";

break;

case WSAECONNREFUSED:

strError="连接的尝试被拒绝";

break;

case WSAENOTSOCK:

strError="在一个非套接字上尝试了一个操作";

break;

case WSAEADDRINUSE:

strError="特定的地址已在使用中";

break;

case WSAECONNRESET:

strError="与主机的连接被关闭";

break;

default:

strError="一般错误";

}

return strError;

}

int CMyQQDlg::GetLocalHostName(CString &sHostName) //获得本地计算机名称

{

char szHostName[256];

int nRetCode;

nRetCode=gethostname(szHostName,sizeof(szHostName));

if(nRetCode!=0)

{

//产生错误

sHostName=_T("没有取得");

return GetLastError();

}

sHostName=szHostName;

return 0;

}

int CMyQQDlg::GetIpAddress(const CString &sHostName, CString &sIpAddress)//获得本地IP

{

struct hostent FAR * lpHostEnt=gethostbyname(sHostName);

if(lpHostEnt==NULL)

{

//产生错误

sIpAddress=_T("");

return GetLastError();

}

//获取IP

LPSTR lpAddr=lpHostEnt->h_addr_list[0];

if(lpAddr)

{

struct in_addr inAddr;

memmove(&inAddr,lpAddr,4);

//转换为标准格式

sIpAddress=inet_ntoa(inAddr);

if(sIpAddress.IsEmpty())

sIpAddress=_T("没有取得");

}

return 0;

}

int CMyQQDlg::GetNamebyAddress(const CString &IpAddress,CString &sY ouName)//获得对方计算机名称

{

unsigned long addr;

addr=inet_addr(IpAddress);

struct hostent FAR * lpHostEnt=gethostbyaddr((char *)&addr,4,AF_INET);

if(lpHostEnt==NULL)

{

//产生错误

sY ouName=_T("");

AfxMessageBox("连接不上");//应该取得其错误

return -1;

}

CString name=lpHostEnt->h_name;

sY ouName=name;

return 0;

}

BOOL CMyQQDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)

if(GetFocus()->GetDlgCtrlID()==IDC_EDIT_SENDMSG

||GetFocus()->GetDlgCtrlID()==IDC_BUTTON_SEND_MSG)

{

AfxGetMainWnd()->SendMessage(WM_KSEND);

return TRUE;

}

return CDialog::PreTranslateMessage(pMsg);

}

◆◆◆控件及其功能◆◆◆

◆◆◆开始连接◆◆◆

void CMyQQDlg::OnButtonConnect() //开始连接

{

// TODO: Add your control notification handler code here

CString str;

m_Y ou_IP.GetWindowText(str);

CString strOut,strIn;

m_Y ou_IP.GetWindowText(strIn);

if(GetNamebyAddress(strIn,strOut)==-1)

{

GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(true);//连接不可用

return;

}

m_MsgSend="你好"+strOut+"!";

UpdateData(false);

if(m_nSockType==SOCK_TCP)

{

pThreadLisen=::AfxBeginThread(_ListenTcpThread,this); //开始TCP线程

GetDlgItem(IDC_BUTTON_SEND_MSG)->EnableWindow(true);//发送消息可用

GetDlgItem(IDC_BUTTON_SEND_FILE)->EnableWindow(true);//文件可用

GetDlgItem(IDC_BUTTON_CAPUTER)->EnableWindow(true);//抓取

}

else

{

pThreadLisen=::AfxBeginThread(_UDPThread,this); //开始UDP 线程

GetDlgItem(IDC_BUTTON_SEND_MSG)->EnableWindow(true);//发送可用

GetDlgItem(IDC_BUTTON_SEND_FILE)->EnableWindow(false);//文件不可用

}

GetDlgItem(IDC_RADIO_TCP)->EnableWindow(false);//单选不可用

GetDlgItem(IDC_RADIO_UDP)->EnableWindow(false);//单选不可用

GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);//断开可用

GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(false);//连

P2P法律服务方案

P2P网贷法律服务方案 作者:北京市百瑞(济南)律师事务所曹健律师 一、公司日常运营法律服务 1、协助开展网贷公司的筹备、日常运营,对公司治理结构,股东会、董事会、监事会的设置、职权分配以及公司章程、制度的具体制定提供法律意见。 2、对公司P2P网贷具体业务运作模式的设计、风险管控方案以及资金托管、外部担保等运营方式进行法律审查和法律意见支持。 3、立足P2P网贷行业发展,定期对行业情报进行收集整理,出具风险防范指导意见,对公司业务的发展、调整及时提出意见、建议,增强风险应对能力。 4、对公司日常业务文本进行合规性审查和修订,防范电子合同的合规性风险,针对个案单独拟定具体业务协议和反担保、共同还款方案设计。 5、参与重大项目的策划、运作、进行相关调查,出具法律风险分析报告,拟订项目执行方案和共同还款、抵押担保设计方案。 6、协助公司处置工伤、劳动争议案件,代为参加劳动

仲裁和诉讼。 二、融资项目法律服务 1、根据公司需求,对融资人、共同还款人、担保人开展尽职调查,评估贷款风险,确定项目可行性。协助调查融资人、共同还款人、担保人主体资格的合法性、财产可执行情况,如经营资质、涉诉情况,资产登记、抵押、查封情况,审核抵押物的流通性、合法性、有权性,协助办理有关抵押手续; 2、根据公司需求,对融资人的项目开发情况,项目审批情况、产业政策符合性、市场前景预期提供参考意见。 3、根据公司需求,对数额较大的贷款项目,列席审贷会,就贷款计划中所涉及的法律问题出具法律意见。 4、根据公司需求,对贷款业务提供律师见证,或委托公证处出具有强制执行效力的公证文书。 三、贷后管理和不良资产清收法律服务 1、利用我所的司法资源,代理或者协助公司处理案件,包括但不限于:资产打包转让、财产保全、诉讼仲裁、破产清算、公证执行、强制执行等具体处置方式,确保公司合法权益得到有效保障。 2、对逾期案件进行案情分析和研究,对债务人及担保

基于C#的P2P聊天程序设计

基于C#的P2P聊天程序设计 【摘要】本文主要是应用C#的Socket类、TcpClient类和TcpListener类来设计实现了基于局域网P2P的聊天程序。 【关键词】C#;P2P;聊天程序 在网络发达的今天,单机的应用程序越来越显示出其局限性,计算机的协同工作C#作为最新一代程序设计语言,有着强大的网络程序开发功能,本文主要应用Socket类、TcpClient类和TcpListener类来实现一个简单的P2P聊天程序的设计。 1、设计所用关键技术 1.1 P2P P2P,是peer-to-peer的缩写,也称对等网络技术,是一种网络结构,在该结构中,用户可以直接连接其他用户的计算机,进行文件共享和信息交换,每一个节点所拥有的权利和义务都是对等的。编写P2P通信程序,通常要做到两点: (1)负责监控的端口上是否有信息发送,如果有则显示出来,同时应该获知信息来自哪。(2)负责将信息发送到指定地点,以便进行通信。 1.2 Socket类 Socket称为套接字,它提供了接收对方发送的信息和发送数据到目标设备的功能。在使用套接字与远程设备进行通信之前,必须使用协议和网络地址信息初始化套接字。 1.3 TcpClient类和TcpListener类 TcpClient类专为客户端设计,它为TCP网络服务提供客户端连接,构建于Socket类之上,从而可以提供较高级别的TCP服务,即提供了通过网络连接、发送和接收数据的简单方法。TcpClient使用标准的Stream流处理技术来完成网络数据的发送和接收,可以通过NetworkStream来完成数据的发送和接收。NetworkStream可以被视为一个数据通道,架设在数据来源端和接收端之间,数据的读取和写入均可通过这个通道完成。 TcpListener类负责监视TCP端口上的传入请求,通过ExclusiveAddressUse 属性获取或设置一个Boolean值,指定TcpListener是否允许一个基础套接字来监听特定端口,然后通过绑定本机的IP地址和相应端口创建TcpListener的对象实例,执行Start方法启动侦听。当TcpLitener侦听到用户端的连接后,根据客户端不同的请求方式,应用AcceptTcpClient方法接收传入的连接请求,然后创建

即时通讯软件的设计与实现

即时通讯软件的设计与实现 1 系统实现模块 1.1 服务端模块 服务端主要包括三个模块: 1.网络模块,建立TCP服务器,负责监听端口,与客户端建立连接并接受和发送数据。 2.应用模块,负责处理从网络模块接收到的数据,予以分析处理,进行转发或对数据库进行操作,并返回相关信息。 3.数据层,数据层用来与数据库建立连接,应用模块必须通过数据层来进行数据库的操作。 日志记录 图4.1 系统模块图 1.2 客户端模块 用户端包块以下模块: 1.用户界面模块,此模块包括客户端的操作界面,由NetBeans编写的GUI,进行了较多的美化,采用偏向Vista的风格。 2.网络模块,此模块包括两个小模块,TCP模块用于和服务器端通讯,而UDP 模块则负责和客户端进行P2P通讯。 3.聊天模块,此模块负责在用户聊天时候,对聊天的数据进行封装,对聊天的图片也进行压缩,以适用网络传输。在接受到聊天数据之后,又会对聊天数据进行分解操作,最后生成聊天内容。 4.群组模块,此模块包括群组聊天、群组的创建、管理、更新等功能。 5.文件传输模块,此模块用于实现客户端之间的文件传输功能。 6.视频聊天模块,此模块用于实现客户端之间的视频聊天功能。 7.系统设置记录模块,此模块用于实现保存聊天记录,登录日志,以及保存系统设置信息的功能。 系统记录模块 图4.2 客户端模块图 2 数据库设计 2.1用户表设计 用户表是系统中的基础表,主要用来记录用户注册时的各种信息,此表还有一个从表userlogin表用来记录用户登录和状态信息。[12] Userinfo表

UserLogin表 用户关系表是用来保存用户之间的好友关系的数据表,查询好友列表的时候要从此表中查询与自己ID想关联的好友ID,type字段可以设置两者的关系,其中1为好友关系,0为黑名单。 其他表,如组群表,族群信息表就不在此一一列出。 3 系统模块的详细设计 此章节将叙述系统部分模块的设计方法和具体实现。 3.1 网络模块的设计实现 本系统采用TCP和UDP混合的网络通讯,客户端与服务器之间登录验证时采用TCP连接,登录之后,客户端与服务器采用UDP方式保持通讯,客户端和客户端之间采用UDP连接,如果无法直接连接,通过服务器申请UDP穿透NAT,如果失败,则消息通过服务器中转传递。

p2p原理

P2P之UDP穿透NAT的原理与实现(附 源代码) P2P 之 UDP穿透NAT的原理与实现(附源代码) 原创:shootingstars 参考:https://www.360docs.net/doc/3d2596235.html,/draft-ford-midcom-p2p-01.txt 谁先动,谁吃亏 论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。 首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在I P地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。 最开始NAT是运行在路由器上的一个功能模块。 最先提出的是基本的NAT,它的产生基于如下事实:一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这是在上世纪90年代中期提出的)。那么这个子网中其实只有少数的节点需要全球唯一的IP地址,其他的节点的IP地址应该是可以重用的。 因此,基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。如果这些节点需要访问外部网络,那么基本NAT就负责将这个节点的子网内IP转化为一个全球唯一的IP然后发送出去。(基本的NAT会改变IP 包中的原IP地址,但是不会改变IP包中的端口) 关于基本的NAT可以参看RFC 1631 另外一种NAT叫做NAPT,从名称上我们也可以看得出,NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。基本NAT的设备可能我们见的不多(呵呵,我没有见到过),NAPT才是我们真正讨论的主角。看下图: Server S1 18.181.0.31:1235 | ^ Session 1 (A-S1) ^ | | 18.181.0.31:1235 | | v 155.99.25.11:62000 v | |

p2p查询服务器

多线程得P2P实现 Phase 1: Establishing Client-Server Communications 1.题目要求 第一阶段要求实现一个多线程的C/S结构系统,主要实现了用户的四种功能,分别是登陆,上传文件,查询文件,退出。登陆需要对密码在客户端和服务器端分别加密和解密,如果匹配错误需要在客户端返回信息格式为LGINusername#password;上传文件可以支持多次上传,并且为文件指定端口号,格式为SHREportnumber#filename,在模拟数据库中存储文件相应得信息(文件只能是.txt)上传成功回服务器返回SHOK的信息;查询文件要求根据文件名,查询数据库中所有符合要求的文件并且输出格式设置为SRCHfilename# username #ip#port的信息,一次输出一条;退出命令执行时需要将用户上传得所有文件信息删除,然后关闭SOCKET。 2.开发环境 操作系统:windows XPp 编程语言:C 编译器:VC6.0 3.程序详解: 3.1Socket连接和数据库模拟 这里第一阶段主要是先实现Client和Server可以相互交流的功能,这里主调用的Windows的API函数来建立socket和连接client和server,函数listen监听,bind绑定socket和IP,accept用来创建连接的socket,然后通过send和recv函数来发送和接受数据。 数据库主要用了结构体来模拟,userid(username,pwd) usefile ( username , filename[][] ,port[][] ,ip)。Usefile采取的对应每一个用户开出一张表,这样的优点是在删除的时候比较节省时间,缺点是对硬盘有浪费,需要很多多余的开销。3.2登陆部分 这部分主要是客户端输入用户名密码,然后服务器验证返回的一个过程,首先这里需要对用户的密码采取一个加密得措施,公式为password=password-key,key为随机生成得0到9的int型数据,加密以后需要把key添加在密码的前面,使得服务器可以验证密码,需要注意得是key+48才是此int相对应得char型字符。服务器解码后取相应的部分到username和password,然后和已经初始化在

即时聊天工具

一:腾讯QQ 【简介】:腾讯公司成立于1998年的11月12日,次年即1999年2月就推出了仿照ICQ软件的中国版IM工具OICQ,它可以说是QQ的前生。时至今日,腾讯已经成为中国软件行业的巨无霸,QQ的大名更是无人不知,没人不晓,差不多每个网友都拥有一个QQ号。至于说腾讯QQ为什么能取得如此辉煌的成功,应该是一半靠的是实力,另一半靠的是运气。 【特色】:说老实话,腾讯QQ最大的特色也是其最大的优势,应该就是其无比庞大的用户数量。而就它的功能来说,可以说是青出于蓝而胜于蓝,并且已经到达了一个相对的顶峰。其操作简单,支持实时的音视频聊天,支持大文件传输、深入人心的群功能,以及精彩的在线游戏等多种增值功能,让它已经成为了一个时代的标志! 点评】:QQ可以说是中国IT行业的骄傲,它功能强大丰富、操作简单而易用,娱乐性很强,它的身影已经遍布中国的大街小巷。对很多人来说,上QQ、玩QQ已经成为生活的一部分。虽然它有很多收费项目让不少用户一直抱怨,但真的想要离开它却发现又不是那么容易的事情! 二:微软MSN(Windows Live Message) 【简介】:微软公司创建于1975年,是全球最大的电脑

软件提供商,得益于Windows系列操作系统,使其成为全球软件行业的霸主。它的软件产品众多,1999年7月推出了网络即时信息客户程序MSN Messenger。目前MSN(从8.0开始新版本改名为Windows Live Message)可以说是国外IM领域最为流行的IM客户端之一,而在中国它的市场份额也一直处于前列,但却始终无法超越QQ。 【特色】:MSN是一种优秀的即时通信工具,它基于Microsoft 高级技术,可使您和您的家人更有效地利用 Web进行通信。目前MSN Messenger的最新版本是Windows Live Messenger 2009,它仍包含您所喜爱的Messenger 的一切功能:如联系人名单、图释以及使用文本、声音和视频与您的朋友即时联系。此外,它还提供了轻松连接并共享照片和文档的新方式。可惜,Windows Live Messenger中用户无法进行好友查找;【点评】:和QQ不同,MSN的特色之处在于它的严肃和保守性,这使得它更受企业用户所青睐,同时这也使得它的用户群更集中在公司的白领职员中,而这也是MSN的市场占有率始终停步不前无法超越QQ的主要原因。并且它的界面及操作和QQ相比风格差别比较明显。而新版的Windows Live Messenger为了打破这种局面,加入了更多有趣功能,但就娱乐性而言仍然无法和QQ相提并论; 三:百度Hi

提供P2P网络服务侵犯著作权罪帮助犯的刑事责任解析

提供P2P网络服务:侵犯著作权罪帮助犯的 刑事责任解析 关键词: P2P;网络服务;侵犯著作权罪;刑事责任 内容提要: P2P网络服务提供者在著作权犯罪中是否应当承担帮助犯的刑事责任不能一概而论。要追究P2P网络服务提供者的帮助犯刑事责任,首先必须明确其存在故意的主观过错。有必要从犯罪故意、意思联络等主观层面进行考察,研究提出P2P网络服务提供者帮助故意的司法判断标准。 现阶段互联网用户普遍通过P2P网站经营者支持的分散式传输技术享受其他终端提供的下载或者在线视听服务,这在法律性质上属于“信息网络传播权”控制的“网络传播行为”。最高人民法院、最高人民检察院发布的《关于办理侵犯知识产权刑事案件具体应用法律若干问题的解释(二)》(2005年)和《关于办理侵犯著作权刑事案件中涉及录音录像制品有关问题的批复》(2007年)均明确指出,通过信息网络传播作品的行为应当视为刑法第二百一十七条第(三)项规定的“复制发行”。据此,以营利为目的通过网络传播录音录像制品,违法数额较大或者有其他严重情节的,构成侵犯著作权罪,并不存在司法认定上的障碍。但是当终端用户通过网络未经许可传播录音录像制品构成侵犯著作权罪时,提供P2P技术的网站是否构成帮助犯并无定论。对于此类信息网络技术与刑法规范交织的知识产权犯罪问

题,有必要在明晰相关技术环节的基础上提出符合刑法原理的司法判断规则。 一、提供P2P网络服务的行为性质 P2P网络服务是指通过点对点分散式数据传输软件使用户直接连接到其他计算机或交换文件而非连接到服务器进行浏览与下载。P2P网络服务传输系统的特色在于使用者必须在自己电脑内划出分享区,进入P2P系统必然要开放“共享区”让他人下载自己电脑内的档案,关闭任何一名用户的计算机都不会影响P2P软件从其他用户的计算机中搜索所需文件,这也使得P2P网络传输速度相对多线程传输更为迅捷。 若P2P软件终端用户以营利为目的,未经著作权人授权,上传侵权录音录像制品的数据文件,通过P2P网络技术传输给其他终端用户,供其下载或者在线视听。对于P2P网络服务提供者的此种行为是否构成帮助犯,需要结合P2P技术的发展阶段来分析: 对于早期的P2P技术而言,终端用户使用P2P软件必须依赖于网络服务提供者提供的编目和检索服务。换言之,网络服务提供者与终端用户之间存在着一种持续性关系,当前者明知用户正在利用其服务实施侵犯著作权的侵权或犯罪行为时,应采取措施阻止后者的行

基于Qt的p2p局域网聊天和文件传输软件要点

基于Qt的局域网聊天和文件传输软件设计 摘要 随着计算机网络技术的飞速发展,人们对于网络的依赖性也越来越大。通过网络的局域网通信也越来越受到人们的喜爱,比如说现在非常流行的QQ局域网通信软件就解决了人们在网络中交流的需求。 基于Qt的P2P局域网聊天和文件传输软件,是基于TCP/IP协议中的TCP 和UDP协议完成的一个能够完成局域网通信和传输文件的软件,该软件实现了局域网内的通信,使用该软件作为通信和传输文件的工具,既简单又安全。 关键词:计算机网络, TCP, UDP , 文件传输; Abstract With the rapid development of computer network technology, people are more and more dependent on the network. Instant messaging via the Internet has become more and more popular, for example, it is now very popular QQ instant messaging software to solve the needs of people in the network communication. Based on P2P instant chat and file transfer software is based on TCP / IP protocol in the TCP and UDP protocols to complete a to complete the instant messaging and file transfer software, the software realized the LAN communication, the use of the software as a communication and file transfer tool, which is simple and safe. Key word:computer network,TCP, UDP , file transfer;

聊天软件需求分析

编号:__001____________ 版本:____1.0__________ <即时通讯> 需求分析说明书 委托单位:付勇智 承办单位:冰点开发小组 编写:(签名)____李超__________ 2007 年 4 月 11 日 复查:(签名)______聂润声_______ 2007 年 4 月 13 日 批准:(签名)____翁靖凯_________ 2007 年 4 月 13 日

聊天软件需求分析说明书 1.引言 1.1编写目的 本需求规格说明书编写的目的是为了清晰地说明本小组开发《聊天软件》要实现的所有功能。同时也为软件使用者和软件开发者之间建立共同的需求目标,进行一定程度的交流沟通。同时对软件所需实现的功能模块做了全面的描述。它是后续开发工作和验收工作的依据文件。软件使用者和软件开发者以此为共同的基础。 1.2项目背景 随着网络的普及,人类生活越来越依赖网络,人与人之间的交也更多的是在网络上进行,于交流的实时性,即时通讯系统也被越来越多的人所使用。 即时通讯系统除了普通的生活上的交流,也在商业交流中越来越受到重视,它可以是 个很好的与客户之间即时交流的平台,在时间上它要比电子邮件更加具有实时性,而费用相对 电话交流也要经济的多。 在这种环境下,聊天软件作为一种即时通讯工具,得到了很好的发展。 1.3任务描述 1.3.1目标 开发一个即时通讯软件,能够即时发送接受信息,操作简单,能良好的运行。 1.3.2条件与限制 开发时间:三个月 开发环境:J2SE SDK1.5,NetBeans5.5.1,JBuilder2006,MS SQL SERVER 2005 1.3.3 需求 交流者身份的确定,即交流双方需要各自确定允许与对方交流才能交流;交流信息的加密,即不允许他人窃听双方的交流信息;点对点交流(私聊),一次对话的对象只是一个人;同时可以利用本系统形成的P2P(peer to peer,点对点)网络进行用户间的文件传输,进行资源的共享。 2.功能描述

P2P端口映射、UPnP功能和使用详解

P2P端口映射UPnP功能和使用详解 一、UPnP的概念: 以下是微软官方网站对UPnP的解释: 问:什么是UPnP? 答:通用即插即用(UPnP) 是一种用于PC 机和智能设备(或仪器)的常见对等网络连接的体系结构,尤其是在家庭中。UPnP 以Internet 标准和技术(例如TCP/IP、HTTP 和XML)为基础,使这样的设备彼此可自动连接和协同工作,从而使网络(尤其是家庭网络)对更多的人成为可能。 问:UPnP 对消费者意味着什么? 答:简单、更多选择和更新颖的体验。包含通用即插即用技术的网络产品只需实际连到网络上,即可开始正常工作。实际上,UPnP 可以和任何网络媒体技术(有线或无线)协同使用。举例来说,这包括:Category 5 以太网电缆、Wi-Fi 或802.11B 无线网络、IEEE 1394("Firewire")、电话线网络或电源线网络。当这些设备与PC 互连时,用户即可充分利用各种具有创新性的服务和应用程序。 以下是BC官方网站对UPnP的解释: UPnP(Universal Plug and Play),通用即插即用,是一组协议的统称,不能简单理解为UPnP=“自动端口映射”。在BitComet下载中,UPnP包含了2层意思: 1、对于一台内网电脑,BitComet的UPnP功能可以使网关或路由器的NAT模块做自动端口映射,将BitComet监听的端口从网关或路由器映射到内网电脑上。 2、网关或路由器的网络防火墙模块开始对Internet上其他电脑开放这个端口。 我倒是觉得微软的解释过于理论化,适合写入牛津大词典;而BC官方网站的解释过于含蓄晦涩。其实对于一般的使用者来讲,简单的把UPnP理解为自动端口映射就可以了。它就是一种基于TCP/IP协议的,针对设备彼此间的通讯而制订的新的Internet协议,目的就是希望未来所有联入Internet中的设备能够不受网关阻碍的相互通信。 二、哪些用户需要用UPnP功能? 1、只有在需要使用一些支持UPnP功能的P2P软件的时候,如BT、电骡eMule、MSN 等,我们才需要考虑UPnP这个东东。如果你根本就不用这些软件,仅仅是上网浏览的话,下文就没必要看了; 2、如果你需要使用这些P2P软件,但你是外网用户,那么下文也可以不看了,因为你不需要做什么UPnP就可以正常使用这些P2P软件了;

P2P

P2P互联网时代的计算革命 大多数人接触和了解P2P(Peer-to-Peer,对等计算)还是从Napster开始的。Napster是一家通过P2P技术免费共享和交换音乐文件的网站,曾经风靡一时,尽管后来遭遇版权问题而改为付费使用,但Napster给后来者带来的影响是巨大的,更多采用P2P技术的程序和网站如雨后春笋般涌现出来,应用种类也不断增多。Napster的成功不仅仅是因为其免费服务的特性,更重要的是P2P技术大大增强了人们利用互联网资源的便利性。 事实上,Napster仅仅是冰山之一角。P2P技术广泛地应用在计算和存储共享、搜索、即时通信、网络电视等很多领域。但同时,随着其应用的深入,也面临着标准和安全等问题的困扰。本期专题我们约请了中科院计算所和北京大学的专家为您介绍P2P的技术特点、拓扑结构、安全和激励机制、搜索算法及其发展趋势等。 技术定义 最近几年,Peer-to-Peer (以下简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更是将其列为影响Internet

未来的4项科技之一。 “Peer”在英语里有“对等者”和“伙伴”的意义。因此,从字面上讲,P2P可以理解为对等互联网。国内的媒体一般将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等计算。P2P可以定义为: 网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其他对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源获取者(Client)。 客观地说,这种计算模式并不是什么新技术,自从上个世纪70年代网络产生以来就存在了,只不过当时的网络带宽和传播速度限制了这种计算模式的发展。90年代末,随着高速互联网的普及、个人计算机计算和存储能力的提升,P2P 技术重新登上历史舞台并且带来了一场技术上的革命。许多基于P2P技术的杀手级应用应运而生,给人们的生活带来了极大的便利。 从计算模式上来说,P2P打破了传统的Client/Server (C/S)模式,在网络中每个结点的地位都是对等的。每个结点既充当服务器,为其他结点提供服务,同时也享用其他结点提供的服务。P2P与C/S模式的对比如图1所示。

P2P聊天软件综述

P2P聊天软件 一:软件构架 开发环境:Visual studio 2008 开发语言:C++ 软件框架:MFC 软件功能图: 二:服务器设计 1.数据设计 (1)用户基本信息user_info 序号字段名含义数据类型 1 user_id 用户ID unsigned long 2 user_name 用户显示名称string 3 user_ip 用户IP地址string 4 user_port 用户监听端口short 其中user_id字段为登录时服务器自动分配 (2)登陆用户列表friend_list 含义:用于在客户端或者服务器端保存在线用户信息 数据类型vector (3)消息message 含义:peer之间发送的消息 数据类型:string 2.登录设计(如下图)Array (1)和(2)的登录交互用TCP协议实现。 (1)过程客户端向服务器发送带有user_info结构的信息。服务器仅使用user_name。(2)过程服务器填充user_info的user_id域,把该user_info添加到在线用户列表中,然后向客户端发送该列表。 在客户端登录时,user_id必须设置为0;

其中填充user_id域的方法是:把该user_info在服务器列表中的位置编号-1作为user_id。三:使用方法 首先启动服务器程序,打开服务端软件。然后再点击启动。如下图所示:此时服务器会在它的ip地址与端口进行监听。这里应该注意的是服务器的监听端口是写死了的。在客户端是可以改服务器的端口的,不过现在的版本的服务器还没有实现这一功能。所以在找服务器的时候只改IP地址就行了。不要改端口号。不然就会连不上服务器。 启动服务器程序后,就可以启动客户端程序。客户端可以与服务器在同一个计算机上,也可以不在一个局域网内。只要接入了internet就可以。 已经说过了,现在的这一个版本只能改服务器的IP,而不能够改端口号。以后可以改进这一个功能。上图中的灰色登陆成功按钮在没有进行登陆之前显示的是“登陆”。在设置好服务器的地址与端口后。若能够成功的连接到服务器端口上,则会显示登陆成功。同时也

p2p设置

| 网站首页 | 绿软基地 | 最新绿软 | 热门绿软 | 网络学院 | 源码下载 | 装机绿软 | 网站地图 ?首页 ?系统工具 ?网络工具 ?应用软件 ?多媒体 ?游戏工具 ?教程书籍 ?图形图像 ?绿软基地公告: 装机绿软 ?操作系统 ?卡巴斯基 ?视频转换 ?ASP源码 ?PHP源码 ?.NET源码 ?模板素材 ?网页制作 ?网络编程 ?视频教程 您现在的位置:易网绿软基地 >> 网络学院 >> 电脑教室 >> 软件学堂 >> 正文 P2P终结者使用方法教你如何使用局域网限制别人P2P下 载 文章来源:网络阅读:92865次更新时间:2009-5-25 20:09:02 P2P终结者使用方法 P2P终结者是一款真正只需要在任意一台主机安装即可控制整个网络的P2P流量以及WWW,QQ聊天及各种下载软件

的网管必备工具软件,它具有很好的控制透明性,有效地解决了令许多网络管理员极为头痛的众多问题,软件基于底层协议分析处理实现,具有很好的透明性。 P2P终结者可以适应绝大多数网络环境,包括代理服务器、ADSL路由器共享上网,Lan专线等网络接入环境。P2P 终结者目前可以控制绝大部分流行的P2P软件下载,它可以对目前主流的P2P软件使用协议进行灵活地控制,其中包括Bittorent,比特精灵,贪婪BT,PP,Poco,Kamun卡盟,Bitcomet、Thunder,Kugoo,eMule等等,还支持指定主机全局带宽限制、主机网络带宽实时查看功能、自定义ACL规则控制、IP-MAC绑定控制、网络主机通讯详细信息(IP报文内容分析)实时查看、HTTP下载自定义文件后缀控制功能、FTP下载限制功能、WWW站点自定义控制功能,支持黑名单、白名单方式,以及对QQ,MSN,PoPo,UC聊天工具进行控制,现在就介绍一下它的具体使用方法与过程。 一、监控1、选择网卡2、开始监控 第一步:软件安装非常简单,一路Next下一步便可,不再赘述。当你第一次启动P2P终结者时,会打开它的“系统初始化设置”对话框,如图1,在此窗口中选择你的“接入公网类型”如选择“ADSL路由器共享上网”项,和“请您选择网络连接设备类型”如“交换机”项,和你的公网接入带宽,这些设置都需要如实填写,否则会使软件不能正常工作,影响你的网络监控管理。

p2p聊天程序C++

/******************************************************************** 数据报套接字的对等模式实例:首先输入要发送给对方的消息,然后发送给对方, 再接收对方发送过来的消息,如此循环地进行发送-接收 ********************************************************************/ #include #include #include #pragma comment(lib, "Ws2_32.lib") void main() { WSADA TA wsaData; if( WSAStartup(MAKEWORD(1,1), &wsaData) ) //调用初始化函数,版本号为1.1 { printf("Could not load windows sockets DLL\n"); return; } //创建数据报套接字 SOCKET s = socket(AF_INET,SOCK_DGRAM, 0); if(s==INV ALID_SOCKET) { printf("invalid socket\n"); WSACleanup(); return; } //本地地址信息 sockaddr_in hostAddress; int addressLen = sizeof(sockaddr_in); memset((void*)&hostAddress, 0, addressLen); //清空sockaddr结构 hostAddress.sin_family = AF_INET; //Internet协议族 int port; printf("local port(1024-65535): "); scanf("%d",&port); hostAddress.sin_port = htons(port); //端口 hostAddress.sin_addr.s_addr=INADDR_ANY; //对方地址信息 sockaddr_in remoteAddress; memset((void*)&remoteAddress, 0, addressLen); //清空sockaddr结构 remoteAddress.sin_family = AF_INET; //Internet协议族 printf("remote port(1024-65535): "); scanf("%d",&port);

基于TCP协议的简单即时通信软件的设计与实现

基于TCP协议的网络通信系统的设计与实现 摘要:网络通信,由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微软的WINDOWS系统都在内核提供了对SOCKET字接口的支持。使用这个统一的接口,可以编写一个可移植的TCP/IP通信程序。使信息能够在INTERNET上可靠的传输。 本文设计并实现了基于局域网内的简单即时通信系统,系统采用C/S模式,底层通信通过SOCKET套接字接口实现,服务器负责客户端的登录验证,好友信息的保存和心跳报文的发送。客户端采用P2P方式实现消息传递,并能实现文件的传输。本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何使用XML序列化的消息进行通信。 关键词:即时通信;文件传输;套接字;TCP协议 Abstract :Instant messages have several advantages such as real-time, cross-platform, cheap and efficient. To design a Multi-user IM (instant message) architecture is very i mportant in both theory and realism. Instant message based on TCP/IP protocol that is realized by socket interface. Almost all UNIX operation systems and Microsoft's win dows operation systems provide support of socket in the kernel. Using the uniform int erface, we can develop a portable program of TCP/IP, which help us transfer informati on in Internet safely and credibly. The system uses the client/server(C/S) mode. The server takes the responsibility of th e login message of client, the saving of friend message and Message heartbeat. The tra nsmission of the basic messages of the customer end will be designed on P2P architec ture. This thesis explains how the client and server communicate via serializing XML message. Key words: Instant Message; File Transfer; Socket; TCP protocol

P2P网贷服务协议

使用说明:P2P网贷服务协议,网贷平台格式协议。对于协议签署、服务提供、双方权利义务、用户信息及隐私权保护等作了详尽的安排。 P2P网贷服务协议 甲方: 注册登记号: 住所: 法定代表人: 乙方: 身份证号: 通讯地址: 联系电话: 一、本协议的签署和修订 1.1 本网站只接受持有中国有效身份证明的18周岁以上具有完全民事行为能力的自然人成为网站用户。如您不符合资格,请勿注册,否则本网站有权随时中止或终止您的用户资格。 1.2 本协议内容包括以下条款及本网站已经发布的或将来可能发布的各类规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。本协议是您与本网站共同签订的,适用于您在本网站的全部活动。在您注册成为用户时,您已经阅读、理解并接受本协议的全部条款及各类规则,并承诺遵守中国的各类法律规定,如有违反而导致任何法律后果的发生,您将以自己的名义独立承担所有相应的法律责任。 1.3 本网站有权根据需要不时地修改本协议或根据本协议制定、修改各类具体规则并在本网站相关系统板块发布,无需另行单独通知您。您应不时地注意本协议及具体规则的变更,若您在本协议及具体规则内容公告变更后继续使用本服务的,表示您已充分阅读、理解并接受修改后的协议和具体规则内容,也将遵循修改后

的协议和具体规则使用本网站的服务;同时就您在协议和具体规则修订前通过本网站进行的交易及其效力,视为您已同意并已按照本协议及有关规则进行了相应的授权和追认。若您不同意修改后的协议内容,您应停止使用本网站的服务。 1.4 您通过自行或授权有关方根据本协议及本网站有关规则、说明操作确认本协议后,本协议即在您和本网站之间产生法律效力。本协议不涉及您与本网站的其他用户之间因网上交易而产生的法律关系或法律纠纷,但您在此同意将全面接受和履行与本网站其他用户在本网站签订的任何电子法律文本,并承诺按该等法律文本享有和/或放弃相应的权利、承担和/或豁免相应的义务。 二、服务的提供 2.1 本网站提供的服务包括但不限于:发布借款需求、查阅交易机会、签订和查阅合同、资金充值、提现、代收、代付等,具体详情以本网站当时提供的服务内容为准。您同意,针对借款人用户,本网站有权根据借款人提供的各项信息及本网站独立获得的信息评定借款人在本网站所拥有的个人信用等级,或决定是否审核通过借款人的借款申请。 2.2 基于运行和交易安全的需要,本网站可以暂时停止提供、限制或改变本网站服务的部分功能,或提供新的功能。在任何功能减少、增加或者变化时,只要您仍然使用本网站的服务,表示您仍然同意本协议或者变更后的协议。 2.3 您确认,您在本网站上按本网站服务流程所确认的交易状态将成为本网站为您进行相关交易或操作(包括但不限于冻结资金、代为支付或收取款项、订立合同等)的明确指令。您同意本网站有权按相关指令依据本协议和/或有关文件和规则对相关事项进行处理。 2.4您未能及时对交易状态进行修改或确认或未能提交相关申请所引起的任何纠纷或损失由您本人负责,本网站不承担任何责任。 三、交易管理及费用 3.1 在您成功注册后,您可以自行或授权您的代理人根据本网站有关规则和说明,通过本网站确认签署有关协议并经本网站审核通过后实现借款需求或资金的出借(出借方式包括但不限于向借款人直接出借或受让债权等形式)。详细操作规则及方式请见有关协议及本网站相关页面的规则和说明。

网络课程设计指导书

《计算机网络》 课程设计指导书 湖北汽车工业学院 二○○八年六月

目录 一、课程设计的目的与任务 (1) 二、课程设计的主要内容与要求 (1) 三、课程设计的质量标准与成绩评定 (1) 四、课程设计选题 (3) 【课程设计选题一】P2P聊天程序 (3) 【课程设计选题二】FTP客户端设计与实现 (6)

一、课程设计的目的与任务 计算机网络课程设计是使学生全面系统理解和掌握计算机网络的原理和方法的重要环节。在理论课完成之后,给学生创造一个将理论应用于实际的机会。学生在教师的指导下,通过1周时间,完成一个简单的网络应用的设计、分析、实施与调试工作。通过实际训练,使学生充分掌握计算机网络理论的应用技能。 二、课程设计的主要内容与要求 每位学生必须在指导教师的指导下,独立完成一个简单的网络应用程序的设计、编写与调试工作,设计课题一般由指导教师拟定,课题选择时,应保证课题包含有课程的主要内容,或是有一定实践意义的内容,整个课程设计的工作量应适当,以使学生有充分的时间进行设计、编程与调试。 在完成课题验收后,学生应在规定的时间内完成课程设计报告一份(不少于2000字)。 2.1 课程设计选题 ●P2P聊天程序:利用局域网网络环境设计并实现简单的端对端聊天应用程序, 具有向对方显示上线、下线、暂离、自动回复等功能。 ●FTP客户端:利用已有网络环境设计并实现简单的FTP客户端,要求能够符合 FTP协议标准,具有向FTP服务器发送命令并解析FTP服务器返回信息的功 能;应实现的命令包括: cd:改变服务器端当前目录 dir:列出服务器端当前目录内容 get:取服务器端的一个文件 ?:显示你提供的命令 quit:退出返回 2.2 课程设计方案制定 程序运行环境是Windows平台,网络环境是LAN,开发工具选用VB或者VC等集成开发环境,通信技术选用WinSock编程组件,可以选用API。 三、课程设计的质量标准与成绩评定 课程设计成绩考核采用:优、良、中、及格、不及格五级评分制,评分标准如下: 优秀:程序能够非常好地实现所有规定功能要求,设计说明书层次清楚、条理分明,协议设计规范、合理、灵活、正确,协议的描述清楚,书写工整、资料齐全。对於善于独立思考,其设计和分析有独到之处的学生优先考虑。

基于p2p的局域网聊天和文件传输软件

基于p2p的即时聊天和文件传输软件 摘要 随着计算机网络技术的飞速发展,人们对于网络的依赖性也越来越大。通过网络的即时通信也越来越受到人们的喜爱,比如说现在非常流行的QQ即时通信软件就解决了人们在网络中交流的需求。 基于p2p的即时聊天和文件传输软件,是基于tcp/ip协议中的tcp和udp协议完成的一个能够完成即时通信和传输文件的软件,该软件实现了局域网内的通行,在不需要使用公网的情况下,使用该软件作为通信和传输文件的工具,既简单又安全。 该软件采用了通信模型中的p2p模型,使用java语言实现,实现原理较简单功能较单一,界面美化度较低。是一款简单的即时通信和文件传输软件。 关键词:计算机网络;p2p ;tcp ;udp ;通信和文件传输软件

目录 1 引言 (1) 1.1课题背景 (1) 1.2国内外现状 (1) 1.3本课题研究的迫切性 (1) 1.4本文的主要工作 (1) 2.需求分析和开发工具 (1) 2.1.需求分析 (1) 2.2开发工具 (2) 3.系统总体结构设计 (3) 3.1基本简介 (3) 3.2系统功能模块设计 (3) 3.3功能模块介绍 (4) 4.系统流程与实现 (5) 4.1系统设计流程 (5) 4.1.1 即时聊天功能的流程设计 (5) 4.1.2 文件传输功能系统实现 (6) 4.2实现 (8) 5 .测试 (10) 结论 (13) 参考文献 (13)

1 引言 1.1 课题背景 网络的发展促进了通信的发中,通信的发展反过来让网络发展的更大更快,通信作为我们日常生活中不可或缺的东西,正在改变着人们的生活。比如说QQ即时通信软件就为人们的生活和学习带来了极大的方便。但是人们有时需要和与自己同一个局域网内的用户通信而通信的内容不通过公网来保证通信的安全,防止黑客或者一些心怀不轨的人通过非法的手段获取到通信的内容。因为一旦信息泄露了就有可能带来不可估量的损失。在这种情况下,基于p2p的即时聊天和文件传输的软件就产生了。 1.2 国内外现状 网络的普及也让一些人获得了获取了更多的信息。通过窃听,篡改,重放等攻击的手机来阻止,或者是窃取别人的有用信息,这种事在一些大型的公司里曾经就发生过。现在一些大型的公司自己会去开发适合自己公司的即时通信软件来防止此类的安全事件出现,因此基于p2p的即时聊天和文件传输的应用开发现在仍然受到关注。1.3 本课题研究的迫切性 基于p2p的即时聊天和文件传输软件的实现能够帮助我们了解基于p2p的软件的实现原理和过程,为我们以后开发一些大型的p2p的软件提供了技术上的保证。同时该软件能够用于局域网的通信和传输文件,具有一定的实际意义。 1.4 本文的主要工作 本文主要介绍了基于p2p的即时聊天和文件传输的软件的实现原理和实现的过程,针对软件的原理和过程进行深入的讲解。同时本文可以作为基于p2p的即时聊天和文件传输的软件的使用说明书,通过具体而详细的阐述,让大家更容易的理解基于p2p的即时聊天和文件传输的软件的实现原理和实现的过程。 2.需求分析和开发工具 2.1.需求分析 由于国内外的安全现状不容乐观,人们通信的时的信息很容易会被黑客们获取,为了在局域网中安全简单的痛信,人们就开发了基于p2p的即时通信和文件传输软件。 该软件能够实现在局域网内和其他人通信,从而保证了通信的安全,让人们拥有更加安全和简单的痛信环境。同时,由于该软件是使用java语言开发,具有平台无关性。 能够在不同的操作系统的平台下完成即时通信和文件传输的功能。 2.2.p2p的即时聊天和文件传输软件的功能 p2p的即时聊天和文件传输软件有以下功能: (1)局域网内点对点通信, 能够同一时间和多个人,在不同的ip和端口上实现通信

相关文档
最新文档