/*
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
*/
#include <string.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
using namespace std;
#define PROTOPORT 5188
//extern int erron;
char localhost[] = "localhost";
int main(int argc, char* argv[])
{
struct hostent* ptrh;
struct sockaddr_in servaddr;
SOCKET sockfd; //windows采用大写的SOCKET
int port;
char* host;
int n;
char buf[1000];
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
memset((char*)&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
/*检查命令行参数,如果有,就抽取端口号;否则使用内定的默认值*/
if (argc > 2) {
port = atoi(argv[2]);
}
else {
port = PROTOPORT;
}
if (port > 0) {
servaddr.sin_port = htons((u_short)port);
}
else {
//fprintf(stderr, "bad port number %s \n", argv[2]);
//exit(1);
cout << "bad port number %s" << argv[2] << endl;
return 1;
}
/*检查主机参数并指定主机名*/
if (argc > 1) {
host = argv[1];
}
else {
host = localhost;
}
/*将主机名转换成相应的IP地址并复制到servaddr结构中*/
ptrh = gethostbyname(host);
//if ((char*)ptrh == null)
if ((char*)ptrh == NULL) {
//fprintf(stderr, "invalid host %s \n", host);
//exit(1);
cout << "invalid host %s" << host << endl;
return 1;
}
memcpy(&servaddr.sin_addr, ptrh->h_addr, ptrh->h_length);
/*创建一个套接字*/
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == INVALID_SOCKET) {
//fprintf(stderr, "socket creation failed\n");
//exit(1);
cout << "socket creation failed" << WSAGetLastError() << endl;
return 1;
}
/*请求连接到服务器*/
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == SOCKET_ERROR) {
//fprintf(stderr, "connect failed\n");
//exit(1);
cout << "connect failed" << WSAGetLastError() << endl;
return 1;
}
/*从套接字反复读数据,并输出到用户屏幕上*/
memset((char*)&buf, 0, sizeof(buf));
n = recv(sockfd, buf, sizeof(buf), 0);
while (n > 0) {
//write(1, buf, n);//1表示标准输出的文件描述符,这句话的作用是把buf的内容打印到屏幕
cout.write(buf, n);
n = recv(sockfd, buf, sizeof(buf), 0);
}
/*关闭套接字*/
closesocket(sockfd);
/*注销winsock*/
WSACleanup();
/*终止客户程序*/
//exit(0);
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本资源介绍一个简单的使用winsock套接字进行网络通信的实例。客户机和服务器采用面向连接的传输协议tcp。实例将有助于阐明面向连接的交互中的细节问题,展示套接字调通的次序,以及客户机调用与服务器调用之间的区别,并说明面向连接的服务软件是如何使用套接字的。 Windows环境下的c++程序,客户机和服务器程序在编译后,均以命令行的方式执行。 服务器程序执行时可以带一个命令行参数,使用来接受请求的监听套接字的协议端口号。这个参数是可选的。如果不指定端口号,代码将使用程序内定的端口号5188. 客户机程序执行时可以带两个命令行参数:一个是服务器所在计算机的主机名,另一个是服务器监听的协议端口号。这两个参数都是可选的。如果没有指定的协议端口号,客户机使用程序内定的默认值5188,如果一个参数也没有,客户机使用默认端口和主机名localhost。 client:创建一个套接字,通过网络连接一个服务器,来打印服务器的消息 sever:分配一个套接字,然后反复执行以下几步 (1)等待客户的下一个连接 (2)发送一个短消息给客户 (3)关闭与客户的连接 (4)转向(1)步
资源推荐
资源详情
资源评论
收起资源包目录
p35.zip (12个子文件)
p35
client
client
client.vcxproj.user 168B
client.vcxproj.filters 968B
client.cpp 2KB
client.vcxproj 6KB
.vs
client
v17
.suo 27KB
client.sln 1KB
sever
sever.sln 1KB
.vs
sever
v17
.suo 28KB
sever
sever.vcxproj.user 168B
sever.vcxproj 6KB
sever.cpp 2KB
sever.vcxproj.filters 967B
共 12 条
- 1
资源评论
ADoubleLiu
- 粉丝: 58
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功