基于TCP协议的socket编程实例
来源:互联网 发布:matlab的mac版本 编辑:程序博客网 时间:2024/05/21 15:45
基于TCP协议的socket编程实例
l 实例编译环境为Microsoft Visual Studio 2010
//****************************Server.c**********************************//
#define WIN32
#include <windows.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
#include <stdio.h>
#include <string.h>
#define PROTOPORT 5193
#define QLEN 6
int visits = 0;
int main(int argc, char *argv[]){
struct hostent *ptrh;
struct protoent *ptrp;
struct sockaddr_in sad;
struct sockaddr_in cad;
int sd, sd2;
int port;
int alen;
char buf[1000];
#ifdef WIN32
WSADATA wsaData;
WSAStartup(0x0101, &wsaData);
#endif
memset((char *)&sad,0,sizeof(sad));
sad.sin_family = AF_INET;
sad.sin_addr.s_addr = INADDR_ANY;
if (argc > 1) {
port = atoi(argv[1]);
} else {
port = PROTOPORT;
}
if (port > 0){
sad.sin_port = htons((u_short)port);}
else{
fprintf(stderr,"bad port number %s\n",argv[1]);
exit(1);
}
if ( ((int)(ptrp = getprotobyname("tcp"))) == 0) {
fprintf(stderr, "cannot map \"tcp\" to protocol number");
exit(1);
}
/* Create a socket */
sd = socket(PF_INET, SOCK_STREAM, ptrp->p_proto);
if (sd < 0) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
if (bind(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {
fprintf(stderr,"bind failed\n");
exit(1);
}
if (listen(sd, QLEN) < 0) {
fprintf(stderr,"listen failed\n");
exit(1);
}
while (1) {
alen = sizeof(cad);
if ( (sd2=accept(sd, (struct sockaddr *)&cad, &alen)) < 0)
{
fprintf(stderr, "accept failed\n");
exit(1);
}
visits++;
printf("Accepted client IP:[%s],port:[%d]\n ", inet_ntoa (cad.sin_addr),ntohs(cad.sin_port));
sprintf(buf,"This server has been contacted %d time%s\n",
visits,visits==1?".":"s.");
iSend=send(sd2,buf,strlen(buf),0);
printf("send() byte:%d\n",iSend);
closesocket(sd2);
}
}
//***********************client.c************************************//
#define WIN32
#include <windows.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")//在vs2010中添加此库函数
#include <io.h>
#include <stdio.h>
#include <string.h>
#define PROTOPORT 5193
extern int errno;
char localhost[] = "localhost";
int main(int argc,char *argv[]){
struct hostent *ptrh;
struct protoent *ptrp;
struct sockaddr_in sad;
int sd;
int port;
char *host;
int n;
char buf[1000];
#ifdef WIN32
WSADATA wsaData;
WSAStartup(0x0101, &wsaData);
#endif
memset((char *)&sad,0,sizeof(sad));
sad.sin_family = AF_INET;
if (argc > 2) {
port = atoi(argv[2]);
} else
{
port = PROTOPORT;
}
if (port > 0)
sad.sin_port = htons((u_short)port);
else {
fprintf(stderr,"bad port number %s\n",argv[2]);
exit(1);
}
if (argc > 1) {
host = argv[1];
} else {
host = localhost;
}
ptrh = gethostbyname(host);
if ( ((char *)ptrh) == NULL ) {
fprintf(stderr,"invalid host: %s\n", host);
exit(1);
}
memcpy(&sad.sin_addr, ptrh->h_addr, ptrh->h_length);
if ( ((int)(ptrp = getprotobyname("tcp"))) == 0) {
fprintf(stderr, "cannot map \"tcp\" to protocol number");
exit(1);
}
/* Create a socket. */
sd = socket(PF_INET, SOCK_STREAM, ptrp->p_proto);
if (sd < 0) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
if (connect(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {
fprintf(stderr,"connect failed\n");
exit(1);
}
n = recv(sd, buf, sizeof(buf), 0);
while (n > 0) {
write(1,buf,n);
printf("recv() data from server:\n%s\n",buf);
n = recv(sd, buf, sizeof(buf), 0);
}
closesocket(sd);
exit(0);
}
l 实例执行结果:
图1和图2分别是客户端程序和服务器端程序执行结果,它们是在同一台主机上执行的结果。该主机的IP地址设置为“58.154.232.29”。客户端程序共执行3次,每执行一次服务器端程序就显示与其建立连接的客户端IP地址和端口号,并显示发送的给客户端的字节数。(每次执行时,主机都分配了不同的端口号)
图 1 客户端程序执行结果
图2 服务器端程序执行结果
- 基于TCP协议的socket编程实例
- 基于TCP协议的socket编程实例
- 基于TCP/IP协议的socket编程
- 基于TCP协议下的socket编程
- 基于TCP/IP协议的Socket编程
- 基于TCP/IP协议及UDP协议的socket编程
- 基于TCP协议的网络编程--socket编程(1)
- 基于TCP协议的网络编程--socket编程(2)
- Socket编程基础--基于TCP协议的网络编程
- 基于TCP/IP协议的网络编程—Socket编程
- AVA实现基于Tcp协议的简单Socket通信实例
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 基于TCP协议的Socket通信实例(JAVA)
- 基于TCP协议的Socket
- 基于TCP协议的Socket编程,实现文件的上传
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- ofstream 和ifstream的具体用法
- Linux下的常用shell命令,文本编辑器vi和C语言编译、调试工具gcc、gdb的使用心得 [转]
- C++输入一行字符串的一点小结 【转】
- OMNeT++代码迁移指南:从3.x到4.0
- 网络仿真工具OMNET++ INET OverSim 安装
- 基于TCP协议的socket编程实例
- 设计大改造系列文章
- 【转载】IMS对SIP协议的要求及应用
- C语言时间函数整理
- JAVA中String与StringBuffer的区别 [转载]
- C++自实现string
- [转载]c/c++/VC程序员-笔试题(转)
- 算法:计算某年的第一天是星期几 [转]
- Windows下安装PHP+MYSQL+PHPMYADMIN(APACHE篇)