📄 3-3.htm
字号:
<p>			{</p>
<p>				AlertUser(hWnd, "WSAStartup() failed\n");</p>
<p>				PostQuitMessage(0);</p>
<p>			}</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>			</font><font size=3>hostaddr
= gethostbyname(server_address);</font></p>
<p><font face="宋体" lang="ZH-CN" size=3>			</font><font size=3>if
(hostaddr == NULL)</font></p>
<font size=3>
<p>			{</p>
<p>				AlertUser(hWnd, "gethostbyname ERROR!\n");</p>
<p>				WSACleanup();</p>
<p>				PostQuitMessage(0);</p>
<p>			}</p>
<p>			_fmemcpy(&hostnm, hostaddr, sizeof(struct hostent));</p>
<p>		}</p>
<p>			break;</p>
<p>		case WM_COMMAND:</p>
<p>			switch (wParam)</p>
<p>			{</p>
<p>				case IDM_START:</p>
<p>					if (!Client(hWnd))</p>
<p>					{</p>
<p>						closesocket(s);</p>
<p>						AlertUser(hWnd, "Start Failed");</p>
<p>					}</p>
<p>					break;</p>
<p>				case IDM_EXIT:</p>
<p>//					WSACleanup();</p>
<p>					PostQuitMessage(0);</p>
<p>					break;</p>
<p>			}</p>
<p>			break;</p>
<p>		case UM_SOCK:</p>
<p>			switch (lParam)</p>
<p>			{</p>
<p>				case FD_CONNECT:</p>
<p>					if (!SetSelect(hWnd, FD_WRITE))</p>
<p>						closesocket(s);</p>
<p>					break;</p>
<p>				case FD_READ:</p>
<p>					if (!ReceivePacket(hWnd))</p>
<p>					{</p>
<p>						AlertUser(hWnd, "Receive Packet Failed.\n");</p>
<p>						closesocket(s);</p>
<p>						break;</p>
<p>					}</p>
<p>					if (!SetSelect(hWnd, FD_WRITE))</p>
<p>						closesocket(s);</p>
<p>					break;</p>
<p>				case FD_WRITE:</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>					</font><font size=3>for
(i = 0; i < 1024; i ++)</font></p>
<p><font face="宋体" lang="ZH-CN" size=3>						</font><font size=3>buffer[i]
= (char)'A' + i % 26;</font></p>
<font size=3>
<p>					length = 1024;</p>
<p>					if (!SendPacket(hWnd, length))</p>
<p>					{</p>
<p>						AlertUser(hWnd, "Packet Send Failed!\n");</p>
<p>						closesocket(s);</p>
<p>						break;</p>
<p>					}</p>
<p>					if (!SetSelect(hWnd, FD_READ))</p>
<p>						closesocket(s);</p>
<p>					break;</p>
<p>				case FD_CLOSE:</p>
<p>					if (WSAAsyncSelect(s, hWnd, 0, 0) == SOCKET_ERROR)</p>
<p>						AlertUser(hWnd, "WSAAsyncSelect Failed.\n");</p>
<p>					break;</p>
<p>				default:</p>
<p>					if (WSAGETSELECTERROR(lParam) != 0)</p>
<p>					{</p>
<p>						AlertUser(hWnd, "Socket Report Failure.");</p>
<p>						closesocket(s);</p>
<p>						break;</p>
<p>					}</p>
<p>					break;</p>
<p> }</p>
<p>			break;</p>
<p>		case WM_DESTROY:</p>
<p>			closesocket(s);</p>
<p>			WSACleanup();</p>
<p>			PostQuitMessage(0);</p>
<p>			break;</p>
<p>		default:</p>
<p>			return (DefWindowProc(hWnd, message, wParam, lParam));</p>
<p>	}</p>
<p>	return(NULL);</p>
<p>}</p>
<p>void AlertUser(HWND hWnd, char *message)</p>
<p>{</p>
<p>	MessageBox(hWnd, (LPSTR)message, "Warning", MB_ICONEXCLAMATION);</p>
<p>	return;</p>
<p>}</p>
<p>BOOL Client(HWND hWnd)</p>
</font><font face="宋体" lang="ZH-CN" size=3>
<p>{</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>	</font><font size=3>memset(&dst_addr,'\0',
sizeof (struct sockaddr_in));</font></p>
<font size=3>
<p>	_fmemcpy((char FAR *)&dst_addr.sin_addr,(char FAR *)hostnm.h_addr,hostnm.h_length);</p>
<p>	dst_addr.sin_family = hostnm.h_addrtype;</p>
<p>	dst_addr.sin_port = htons(USERPORT);</p>
<p>	if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)</p>
<p>	{</p>
<p>		AlertUser(hWnd, "Socket Failed");</p>
<p>		return (FALSE);</p>
<p>	}</p>
<p>	if (!SetSelect(hWnd, FD_CONNECT))</p>
<p>		return (FALSE);</p>
<p>	connect(s, (struct sockaddr FAR *)&dst_addr, sizeof(dst_addr));</p>
<p>	return (TRUE);</p>
<p>}</p>
<p> </p>
<p>BOOL ReceivePacket(HWND hWnd)</p>
<p>{</p>
<p>	HDC hDc;</p>
<p>	int length;</p>
<p>	int i1,i2,i3;</p>
<p>	char line1[255], line2[255], line3[255];</p>
<p>	count ++;</p>
<p>	if ((length = recv(s, lpBuffer, 1024, 0)) == SOCKET_ERROR)</p>
<p>		return (FALSE);</p>
<p>	if (length == 0)</p>
<p>		return (FALSE);</p>
<p>	if (hDc = GetDC(hWnd))</p>
<p>	{</p>
<p>		i1 = wsprintf((LPSTR)line1, "TCP Echo Client No.%d", count);</p>
<p>		i2 = wsprintf((LPSTR)line2, "Receive %d bytes",length);</p>
<p>		i3 = wsprintf((LPSTR)line3, "Those are:%c, %c, %c, %c, %c, %c",buffer[0],buffer[1],buffer[2],buffer[100],buffer[1000],buffer[1023]);</p>
<p>		TextOut(hDc, 10, 2, (LPSTR)line1, i1);</p>
<p>		TextOut(hDc, 10, 22, (LPSTR)line2, i2);</p>
<p>		TextOut(hDc, 10, 42, (LPSTR)line3, i3);</p>
<p>		ReleaseDC(hWnd, hDc);</p>
<p>	}</p>
<p>	return (TRUE);</p>
<p>}</p>
<p> </p>
<p>BOOL SetSelect(HWND hWnd, long lEvent)</p>
<p>{</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>	</font><font size=3>if (WSAAsyncSelect(s,
hWnd, UM_SOCK, lEvent) == SOCKET_ERROR)</font></p>
<font face="宋体" lang="ZH-CN" size=3>
<p>	{</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>		</font><font size=3>AlertUser(hWnd,
"WSAAsyncSelect Failure.");</font></p>
<font size=3>
<p>		return (FALSE);</p>
<p>	}</p>
<p>	return (TRUE);</p>
<p>}</p>
<p>BOOL SendPacket(HWND hWnd, int len)</p>
<p>{</p>
<p>	int length;</p>
<p>	if ((length = send(s, lpBuffer, len, 0)) == SOCKET_ERROR)</p>
<p>		return (FALSE);</p>
<p>	else</p>
<p>	if (length != len)</p>
<p>	{</p>
<p>		AlertUser(hWnd, "Send Length NOT Match!");</p>
<p>		return (FALSE);</p>
<p>	}</p>
<p>	return (TRUE);</p>
<p>}</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>程序</font><font size=3>3:SERVER.C</font></p>
<font size=3>
<p>#include <sys/types.h></p>
<p>#include <sys/mntent.h></p>
<p>#include <netinet/in.h></p>
<p>#include <sys/socket.h></p>
<p>#include <arpa/inet.h></p>
<p>#define USERPORT 10001</p>
<p>#define HOST_IP_ADDR "192.1.1.2"</p>
<p>main(int argc, char **argv)</p>
<p>{</p>
<p>	char buf[1024];</p>
<p>	struct sockaddr_in client;</p>
<p>	struct sockaddr_in server;</p>
<p>	int s;</p>
<p>	int ns;</p>
<p>	int namelen;</p>
<p>	int pktlen;</p>
<p>	</p>
<p>	if ((s=socket(AF_INET, SOCK_STREAM, 0))<0)</p>
</font><font face="宋体" lang="ZH-CN" size=3>
<p>	{</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>		</font><font size=3>perror("Socket()");</font></p>
<font size=3>
<p>		return;</p>
<p>	}</p>
<p>	bzero((char *)&server,sizeof(server));</p>
<p>	server.sin_family = AF_INET;</p>
<p>	server.sin_port = htons(USERPORT);</p>
<p>	server.sin_addr.s_addr = INADDR_ANY;</p>
<p>	if (bind(s, (struct sockaddr *)&server, sizeof(server))<0)</p>
<p>	{</p>
<p>		perror("Bind()");</p>
<p>		return;</p>
<p>	}</p>
<p>	if (listen(s,1)!=0)</p>
<p>	{</p>
<p>		perror("Listen()");</p>
<p>		return;</p>
<p>	}</p>
<p>	namelen = sizeof(client);</p>
<p>	if ((ns = accept(s, (struct sockaddr *)&client, &namelen))
==-1)</p>
<p>	{</p>
<p>		perror("Accept()");</p>
<p>		return;</p>
<p>	}</p>
<p>	for (;;)</p>
<p>	{</p>
<p>		if ((pktlen = recv(ns,buf,1024,0))<0)</p>
<p>		{</p>
<p>			perror("Recv()");</p>
<p>			break;</p>
<p>		}</p>
<p>		else</p>
<p>		if (pktlen == 0)</p>
<p>		{</p>
<p>			printf("Recv():return FAILED,connection is shut down!\n");</p>
<p>			break;</p>
<p>		}</p>
<p>		else</p>
<p>			printf("Recv():return SUCCESS,packet length = %d\n",pktlen);</p>
<p>		sleep(1);</p>
<p>		if (send(ns,buf,pktlen,0)<0)</p>
<p>		{</p>
<p>			perror("Send()");</p>
<p>			break;</p>
</font><font face="宋体" lang="ZH-CN" size=3>
<p>		}</p>
</font>
<p><font face="宋体" lang="ZH-CN" size=3>		</font><font size=3>else</font></p>
<font size=3>
<p>			printf("Send():return SUCCESS,packet length = %d\n",pktlen);</p>
<p>	}</p>
<p>	close(ns);</p>
<p>	close(s);</p>
<p>	printf("Server ended successfully\n");</p>
</font><font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY">}</p>
</font></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -