C语言实现socket编程 c语言双向通信时服务端运行发生乱码

一个简单的C语言的socket服务器和客户端程序
程序很简单,windows环境下的,客户端和服务器程序都在本机运行,在客户端输入发送给服务器的字符串,服务器收到字符串后会打印出来,同时与"abc"比较,与"abc"相同就会返给客户端,输入的是正确的,不同会告诉客户端输入时错误的。
客户端程序:client.cpp
#include &winsock2.h&
#include &stdio.h&
#include &stdlib.h&
DEFAULT_PORT&&&&&&&
DEFAULT_BUFFER&&&&&
char& szServer[128],
szMessage[1024];
= DEFAULT_PORT;
int main()
WSADATA&&&&&&
SOCKET&&&&&&&
char&&&&&&&&&
szBuffer[DEFAULT_BUFFER];
int&&&&&&&&&&
&&& struct
&&& struct
hostent&&& *host
(WSAStartup(MAKEWORD(2,2), &wsd) != 0)
printf("Failed to load Winsock library!\n");
printf("Enter a string to send to server:\n");
gets(szMessage);
&&& // Create
the socket, and attempt to connect to the server
&&& sClient =
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
&&& if (sClient
== INVALID_SOCKET)
printf("socket() failed: %d\n", WSAGetLastError());
server.sin_family = AF_INET;
server.sin_port = htons(iPort);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
(connect(sClient, (struct sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR)
printf("connect() failed: %d\n", WSAGetLastError());
&&& // Send and
receive data
send(sClient, szMessage, strlen(szMessage), 0);
&&& if (ret ==
SOCKET_ERROR)
printf("send() failed: %d\n", WSAGetLastError());
&&& printf("Send
'%s' \n", szMessage);
recv(sClient, szBuffer, DEFAULT_BUFFER, 0);
&&& if (ret ==
SOCKET_ERROR){
printf("recv() failed: %d\n", WSAGetLastError());
szBuffer[ret] = '\0';
printf("RECV: '%s'\n",szBuffer);
closesocket(sClient);
WSACleanup();
&&& return
服务器程序:server.cpp
#include &winsock2.h&
#include &stdio.h&
#include &stdlib.h&
DEFAULT_PORT&&&&&&&
DEFAULT_BUFFER&&&&&
iPort&&&&&
= DEFAULT_PORT;
char&& szAddress[128];
DWORD WINAPI ClientThread(LPVOID lpParam)
SOCKET&&&&&&&
sock=(SOCKET)lpP
char&&&&&&&&&
szBuff[DEFAULT_BUFFER];
int&&&&&&&&&&
ret = recv(sock, szBuff, DEFAULT_BUFFER, 0);
if (ret == 0)
&&&&&&&&&&&
else if (ret == SOCKET_ERROR)
&&&&&&&&&&&
printf("recv() failed: %d\n", WSAGetLastError());
&&&&&&&&&&&
szBuff[ret] = '\0';
printf("RECV: '%s'\n", szBuff);
if(strcmp(szBuff,"abc")==0){
memcpy(szBuff,"Send the correct string!",25);
memcpy(szBuff,"Send the wrong string!",23);
send(sock, szBuff, strlen(szBuff), 0);
if (ret == SOCKET_ERROR){
printf("send() failed: %d\n", WSAGetLastError());
&&& return
int main()
WSADATA&&&&&&
SOCKET&&&&&&&
&&&&&&&&&&&&&&&&&
int&&&&&&&&&&
HANDLE&&&&&&&
DWORD&&&&&&&&
dwThreadId;
&&& struct
sockaddr_in local,
&&&&&&&&&&&&&&&&&&&&&&
(WSAStartup(MAKEWORD(2,2), &wsd) != 0)
printf("Failed to load Winsock!\n");
&&& // Create
our listening socket
&&& sListen =
socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
&&& if (sListen
== SOCKET_ERROR)
printf("socket() failed: %d\n", WSAGetLastError());
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(iPort);
(bind(sListen, (struct sockaddr *)&local,
&&&&&&&&&&&
sizeof(local)) == SOCKET_ERROR)
printf("bind() failed: %d\n", WSAGetLastError());
listen(sListen, 8);
&&& // In a
continous loop, wait for incoming clients. Once one
detected, create a thread and pass the handle off to it.
iAddrSize = sizeof(client);
sClient = accept(sListen, (struct sockaddr
*)&client,
&&&&&&&&&&&&&&&&&&&&&&&
&iAddrSize);&&&&&&&
if (sClient == INVALID_SOCKET)
&&&&&&&&&&&
printf("accept() failed: %d\n", WSAGetLastError());
&&&&&&&&&&&
printf("Accepted client: %s:%d\n",
&&&&&&&&&&&
inet_ntoa(client.sin_addr), ntohs(client.sin_port));
hThread = CreateThread(NULL, 0, ClientThread,
&&&&&&&&&&&&&&&&&&&
(LPVOID)sClient, 0, &dwThreadId);
if (hThread == NULL)
&&&&&&&&&&&
printf("CreateThread() failed: %d\n", GetLastError());
&&&&&&&&&&&
CloseHandle(hThread);
closesocket(sListen);
WSACleanup();
&&& return
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。C语言利用socket进行HTTP访问,以下是我访问百度首页的代码,但返回的数据都是乱码,有朋友说是UTF8,我觉得不是,求高手指教下
[问题点数:80分,结帖人yuan85781]
C语言利用socket进行HTTP访问,以下是我访问百度首页的代码,但返回的数据都是乱码,有朋友说是UTF8,我觉得不是,求高手指教下
[问题点数:80分,结帖人yuan85781]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2012年9月 Windows专区大版内专家分月排行榜第一2012年9月 C/C++大版内专家分月排行榜第一2012年8月 Windows专区大版内专家分月排行榜第一
2012年9月 其他开发语言大版内专家分月排行榜第二2012年8月 VC/MFC大版内专家分月排行榜第二2012年8月 其他开发语言大版内专家分月排行榜第二
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 c语言socket编程指南 的文章

 

随机推荐