⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatserver.c

📁 比较完善的局域网聊天系统..内容很详细.值得学习
💻 C
📖 第 1 页 / 共 2 页
字号:
		hwndButtonSend  = CreateWindow( TEXT("button"), TEXT("发送"),
			WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
			0,0,0,0,
			hwnd, (HMENU) ID_BUTTONSEND, hInstance, NULL );
		//发送文件按钮
		hwndButtonSendFile= CreateWindow( TEXT("button"), TEXT("发送文件"),
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			0,0,0,0,
			hwnd, (HMENU) ID_BUTTONSENDFILE, hInstance, NULL );
		//字体颜色选择按钮
		hwndFontSize= CreateWindow( TEXT("button"), TEXT("选择字体"),
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			0,0,0,0,
			hwnd, (HMENU) ID_BUTTONFONTSIZE, hInstance, NULL );
		//就受文件按钮
		hwndButtonRecvFile=CreateWindow( TEXT("button"), TEXT("接收文件"),
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			0,0,0,0,
			hwnd, (HMENU) ID_BUTTONRECVFILE, hInstance, NULL );
		
		
		if( nError = WSAStartup( MAKEWORD(2,0), &WSAData ) )
		{
			MessageBox( hwnd, "WinSock Startup Error!", "Server", MB_ICONERROR | MB_OK );
			return TRUE;
		}
		
		local_server = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
		if( local_server == INVALID_SOCKET )
		{
			MessageBox( hwnd, "Socket Creation Error!", "Server", MB_ICONERROR | MB_OK );
			
			WSACleanup();
			return TRUE;
		}
		
		if( SOCKET_ERROR == WSAAsyncSelect( local_server, hwnd, 
			WM_SOCKET, FD_ACCEPT | FD_READ ) )
		{
			MessageBox( hwnd, "WSAAsyncSelect Error!", "Server", MB_ICONERROR | MB_OK );
			
			closesocket( local_server );
			WSACleanup();
			return TRUE;
		}
		
		server.sin_family = AF_INET;
		server.sin_port = htons( SERVER_PORT );
		if( SOCKET_ERROR == bind( local_server, (struct sockaddr *)&server, sizeof(server) ) )
		{
			MessageBox( hwnd, "Bind Error!", "Server", MB_ICONERROR | MB_OK );
			
			closesocket( local_server );
			WSACleanup();
			return TRUE;
		}
		
		listen( local_server, 5 );
		return 0;
		
	case WM_SIZE:

		cxClient = LOWORD( lParam );
		cyClient = HIWORD( lParam );

		hpen = CreatePen( PS_DOT, 1, RGB(58,110,165) );
		
		hrgnx = CreateEllipticRgn(  90, 130, 490, 280 );
		hrgny = CreateEllipticRgn( 215,   5, 365, 405 );
		CombineRgn( hrgn, hrgnx, hrgny, RGN_XOR );

		DeleteObject( hrgnx );
		DeleteObject( hrgny );


		MoveWindow( hwndReceiveEdit, LOWORD(lParam)/2, 0, LOWORD(lParam)/2,2*HIWORD(lParam)/5,  TRUE );
		MoveWindow( hwndSendEdit, LOWORD(lParam)/2, 3*HIWORD(lParam)/5, LOWORD(lParam)/2, HIWORD(lParam)/5, TRUE );
		MoveWindow( hwndButtonSend, LOWORD(lParam)/2,4*HIWORD(lParam)/5+10,80,30, TRUE );
		MoveWindow( hwndButtonSendFile, LOWORD(lParam)/2+100,4*HIWORD(lParam)/5+10,80,30, TRUE );
		MoveWindow( hwndFontSize, LOWORD(lParam)/2+200,4*HIWORD(lParam)/5+10,80,30, TRUE );
		MoveWindow( hwndButtonRecvFile, LOWORD(lParam)/2+300,4*HIWORD(lParam)/5+10,80,30, TRUE );
		
		return 0;
		
	case WM_SOCKET:
		wEvent = WSAGETSELECTEVENT(lParam);
		wError = WSAGETSELECTERROR(lParam);
		
		switch( wEvent )
		{
		case FD_ACCEPT:
			if( wError )
			{
				MessageBox( hwnd, "Accept Error!", "Server", MB_ICONERROR | MB_OK );
				return 0;
			}
			
			nSize = sizeof(from);
			
			local_listen = accept( local_server, (struct sockaddr *)&from, &nSize );
			EnableWindow( hwndSendEdit, TRUE );
			EnableWindow( hwndReceiveEdit, TRUE );
			
			return 0;
			
		case FD_READ:
			if( wError )
			{
				MessageBox( hwnd, "Read Error!", "Server", MB_ICONERROR | MB_OK );
				return 0;
			}
			
			recv( local_listen, szReceive, sizeof(szReceive)-1, 0 );
			strcpy(szRecvBuf,szReceive);
			//显示设定,如果不是文件就输出
			if(strlen(szReceive)<1000)
			{
				
		  _strtime( tbuffer ); 
			
			strcat(szShow,szReceive);
			strcat(szShow,"    :Client  ");
			strcat(szShow,tbuffer);
		strcat(szShow,"\r\n");
			SetWindowText( hwndReceiveEdit, szShow );
			}
			return 0;
		}
		return 0;
		
		case WM_SETFOCUS:
			SetFocus( hwndSendEdit );
			return 0;
			
		case WM_COMMAND:
			//选择字体按钮被单击
			if( LOWORD(wParam) == ID_BUTTONFONTSIZE)
				if( HIWORD(wParam) == BN_CLICKED )
				{						
					OnFontDialog(hwndSendEdit);	
					
				}
				//发送文件按钮被单击
				if( LOWORD(wParam) == ID_BUTTONSENDFILE)
					if( HIWORD(wParam) == BN_CLICKED )
					{
						GetOpenFileName(&ofn);
						hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
							0, (LPSECURITY_ATTRIBUTES) NULL,
							OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
							(HANDLE) NULL);
						
							SetFilePointer(hf,0,NULL,FILE_BEGIN);
						
						
						
						
						
						dwFileSize = GetFileSize(hf, NULL);
						ReadFile(hf, szChar,dwFileSize,  &dwRead, NULL);
						
						send( local_listen, szChar, dwFileSize, 0 );
						CloseHandle(hf);
						
						
						
						
					}
					//发送 按钮被单击
					if( LOWORD(wParam) == ID_BUTTONSEND )
						if( HIWORD(wParam) == BN_CLICKED )
						{
							GetWindowText( hwndSendEdit, szSend, GetWindowTextLength( hwndSendEdit ) + 1 );
							if(GetWindowTextLength( hwndSendEdit )==0)
								MessageBox(NULL,"不能发空消息","Error!",MB_OK);
							else
								send( local_listen, szSend, strlen(szSend)+1, 0 );
							//						send( local_listen, rgbCurrent, sizeof(rgbCurrent)+1, 0 );
							SetWindowText(hwndSendEdit,NULL);
							
						}
						//接收文件被单击
					if((LOWORD(wParam) == ID_BUTTONRECVFILE )&&
					( HIWORD(wParam) == BN_CLICKED ))
				{
					
					if(!szRecvBuf)
						MessageBox(NULL,"无文件传送过来","Error",MB_OK);
					
					else
					{
						GetSaveFileName(&recvfile);
						hfrecv = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
							0, (LPSECURITY_ATTRIBUTES) NULL,
							OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
							(HANDLE) NULL);
						WriteFile(hfrecv,szRecvBuf,strlen(szRecvBuf)+1,&dwWrite,NULL);
						SetFilePointer( hfrecv, 0, NULL, FILE_END ); 
					
						
						
					}
					CloseHandle(hfrecv);
					
				}
						
						switch(LOWORD(wParam))
				{
				case ID_EXIT:
					PostMessage(hwnd, WM_CLOSE, 0, 0);
				case ID_ABOUT:
					DialogBox(GetModuleHandle(NULL), 
						MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
				}
						
						
						return 0;
		

			case WM_PAINT:
					
				{
						
						 hdc = BeginPaint(hwnd, &ps);
						
						
						DrawBall(hdc, &rcClient);
						
					
						SelectObject( hdc, hpen );
						SelectClipRgn( hdc, hrgn);
						//显示背景
						for( x = cxClient/100; x < cxClient; x += cxClient/100 )
						{
							MoveToEx( hdc, x, 0, NULL );
							LineTo( hdc, x, cyClient );
						}
						
						for( y = cyClient/100; y < cyClient; y += cyClient/100 )
						{
							MoveToEx( hdc, 0, y, NULL );
							LineTo( hdc, cxClient, y );
						}
						
						
					
				
		
			
			
			
			
			
			
			
			hdcClientSend=BeginPaint(hwndSendEdit,&psSend);
			
			GetClientRect(hwndSendEdit, &rectSend);
			GetWindowText( hwndSendEdit, szSend, GetWindowTextLength( hwndSendEdit ) + 1 );
			if(szSend)
			{
				SetTextColor(hdcClientSend, rgbCurrent);
				DrawText(hdcClientSend,szSend,-1,&rectSend,DT_BOTTOM);
			}
			EndPaint(hwndSendEdit,&psSend);
			
			hdcClientRecv=BeginPaint(hwndReceiveEdit,&psRecv);		
			GetClientRect(hwndReceiveEdit, &rectRecv);
			GetWindowText( hwndReceiveEdit, szReceive, GetWindowTextLength( hwndReceiveEdit ) + 1 );
			if(szReceive)
			{
				//设置字体颜色
				SetTextColor(hdcClientRecv, rgbCurrent);
				DrawText(hdcClientRecv,szReceive,-1,&rectRecv,DT_BOTTOM);
			}
			EndPaint(hwndReceiveEdit,&psRecv);
            EndPaint(hwnd,&ps);
				}
			break;
			case WM_TIMER:
					{
						//			RECT rcClient;
						HDC hdc = GetDC(hwnd);
						
						
						
						UpdateBall(&rcClient);
						DrawBall(hdc, &rcClient);
						
						ReleaseDC(hwnd, hdc);
					}
					break;
			
		case WM_DESTROY:
			KillTimer(hwnd, ID_TIMER);
			closesocket( local_server );
			closesocket( local_listen );
			WSACleanup();
			
			PostQuitMessage( 0 );
			return 0;
	}
	
	return DefWindowProc( hwnd, message, wParam, lParam );
}
//字体对话框
void  OnFontDialog(HWND hwnd)
{
	CHOOSEFONT cf = {sizeof(CHOOSEFONT)};
	LOGFONT lf;
    HDC hdc;
	hdc=GetDC(hwnd);
	GetObject(hfont, sizeof(LOGFONT), &lf);
	
	cf.Flags = CF_EFFECTS | CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
	cf.hwndOwner = hwnd;
	cf.lpLogFont = &lf;
	cf.rgbColors = g_rgbText;
	
	if (ChooseFont(&cf)==TRUE) 
	{
		hfont = CreateFontIndirect(cf.lpLogFont);
		hfontPrev = SelectObject(hdc, hfont);
		rgbCurrent= cf.rgbColors;
		rgbPrev = SetTextColor(hdc, rgbCurrent);
		
		
	}
	DeleteDC(hdc);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -