linux多线程socket客户端
来源:互联网 发布:今日股市数据 编辑:程序博客网 时间:2024/06/10 12:08
/*****************************************************************************
File name: tcp_client
Description: 多线程tcp客户端
Author: 作者
Version: 版本
Date: 2012.2.22
Input: 客户端要发送的数据指针 *send
服务器发来的数据指针 *recv
Output: 无
History: 修 改 历 史 记 录 列 表 , 每 条 修 改 记 录 应 包 括 修 改 日 期 、 修 改
者及修改内容简述。
*****************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <pthread.h>
#include <arpa/inet.h>
#define PortnumberSend 3333
#define PortnumberRecv 4444
/*************************************************
Function: // ping
Description: // 线程调用函数,读取服务器发来的数
Input: // 通过指针将服务器发送来的数传递到进程中
Output: // 无
Return: // 无
Others: // 调试不通过 出现段错误
*************************************************/
//void *ping(void)
//{
// system("ping 192.168.0.1");
//}
/*************************************************
Function: // tcp_read
Description: // 线程调用函数,读取服务器发来的数
Input: // 无
Output: // 通过指针将服务器发送来的数传递到进程中*arg
Return: // 无
Others: // 其它说明
*************************************************/
void *tcp_read(void *arg)
{
int nbytes;
int sockfd;
char buffer_read[1024];
struct sockaddr_in server_addr;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) // AF_INET:Internet;SOCK_STREAM:TCP
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
/* 客户程序填充服务端的资料 */
bzero(&server_addr,sizeof(server_addr)); // 初始化,置0
server_addr.sin_family=AF_INET; // IPV4
server_addr.sin_port=htons(PortnumberRecv); // (将本机器上的short数据转化为网络上的short数据)端口号
server_addr.sin_addr.s_addr=inet_addr("192.168.0.1"); // 绑定的固定IP地址,这个地方可以修改地址
/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
//fprintf(stderr,"Connect Error1:%s\a\n",strerror(errno));
printf("no string received! \n");
}
/* 读取服务器发来的数据*/
if((nbytes=read(sockfd,buffer_read,2048))==-1)
{
fprintf(stderr,"Read Error:%s\n",strerror(errno));
printf(" no string is received!\n");
}
buffer_read[nbytes+1]='\0';
printf("Client received from server :%s\n",buffer_read);
/* 结束通讯 */
close(sockfd);
sleep(10);
}
/*************************************************
Function: // tcp_write
Description: // 线程调用函数,将主进程中数据发
送到服务器
Input: // *arg通过指针将进程中检测到的数据发送到服务器
Output: // 无
Return: // 无
Others: //
*************************************************/
void *tcp_write(void *arg)
{
int sockfd;
char *buffer_write=(char *)arg;
struct sockaddr_in server_addr;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) // AF_INET:Internet;SOCK_STREAM:TCP
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
/* 客户程序填充服务端的资料 */
bzero(&server_addr,sizeof(server_addr)); // 初始化,置0
server_addr.sin_family=AF_INET; // IPV4
server_addr.sin_port=htons(PortnumberSend); // (将本机器上的short数据转化为网络上的short数据)端口号
server_addr.sin_addr.s_addr=inet_addr("192.168.0.1"); // 绑定的固定IP地址,这个地方可以修改地址
/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
exit(1);
}
/*向服务器发送数据*/
write(sockfd,buffer_write,strlen(buffer_write));
/* 结束通讯 */
close(sockfd);
printf("The parameter passed from main function is %s \n",buffer_write);
sleep(10);
// return (void *)0;
}
int tcp_client(char *recv,char *send)
{
char *tcp_client_send=send,*tcp_client_recv;
//tcp_client_send=(char *)malloc(1024);
tcp_client_recv=(char *)malloc(1024);
int err1,err2=0,err3;
pthread_t tcp_send,tcp_recv;
while(1)
{
/*创建线程1 发送*/
err1=pthread_create(&tcp_send, NULL, tcp_write, (void *)tcp_client_send);
/*等待线程1 结束*/
pthread_join(tcp_send,NULL);
/*创建线程2 接收*/
err2=pthread_create(&tcp_recv, NULL, tcp_read,(void *)tcp_client_recv);
}
if(err1!=0)
{
printf("pthread is not created.\n");
return -1;
}
sleep(1);
printf("pthread is created... \n");
}
void main(void)
{
char *str1="hello world";
char *str2;
str2=(char *)malloc(1024);
while(1)
{
tcp_client(str2,str1);
printf("main server recv from client %s \n",str2);
}
}
File name: tcp_client
Description: 多线程tcp客户端
Author: 作者
Version: 版本
Date: 2012.2.22
Input: 客户端要发送的数据指针 *send
服务器发来的数据指针 *recv
Output: 无
History: 修 改 历 史 记 录 列 表 , 每 条 修 改 记 录 应 包 括 修 改 日 期 、 修 改
者及修改内容简述。
*****************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <pthread.h>
#include <arpa/inet.h>
#define PortnumberSend 3333
#define PortnumberRecv 4444
/*************************************************
Function: // ping
Description: // 线程调用函数,读取服务器发来的数
Input: // 通过指针将服务器发送来的数传递到进程中
Output: // 无
Return: // 无
Others: // 调试不通过 出现段错误
*************************************************/
//void *ping(void)
//{
// system("ping 192.168.0.1");
//}
/*************************************************
Function: // tcp_read
Description: // 线程调用函数,读取服务器发来的数
Input: // 无
Output: // 通过指针将服务器发送来的数传递到进程中*arg
Return: // 无
Others: // 其它说明
*************************************************/
void *tcp_read(void *arg)
{
int nbytes;
int sockfd;
char buffer_read[1024];
struct sockaddr_in server_addr;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) // AF_INET:Internet;SOCK_STREAM:TCP
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
/* 客户程序填充服务端的资料 */
bzero(&server_addr,sizeof(server_addr)); // 初始化,置0
server_addr.sin_family=AF_INET; // IPV4
server_addr.sin_port=htons(PortnumberRecv); // (将本机器上的short数据转化为网络上的short数据)端口号
server_addr.sin_addr.s_addr=inet_addr("192.168.0.1"); // 绑定的固定IP地址,这个地方可以修改地址
/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
//fprintf(stderr,"Connect Error1:%s\a\n",strerror(errno));
printf("no string received! \n");
}
/* 读取服务器发来的数据*/
if((nbytes=read(sockfd,buffer_read,2048))==-1)
{
fprintf(stderr,"Read Error:%s\n",strerror(errno));
printf(" no string is received!\n");
}
buffer_read[nbytes+1]='\0';
printf("Client received from server :%s\n",buffer_read);
/* 结束通讯 */
close(sockfd);
sleep(10);
}
/*************************************************
Function: // tcp_write
Description: // 线程调用函数,将主进程中数据发
送到服务器
Input: // *arg通过指针将进程中检测到的数据发送到服务器
Output: // 无
Return: // 无
Others: //
*************************************************/
void *tcp_write(void *arg)
{
int sockfd;
char *buffer_write=(char *)arg;
struct sockaddr_in server_addr;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) // AF_INET:Internet;SOCK_STREAM:TCP
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
/* 客户程序填充服务端的资料 */
bzero(&server_addr,sizeof(server_addr)); // 初始化,置0
server_addr.sin_family=AF_INET; // IPV4
server_addr.sin_port=htons(PortnumberSend); // (将本机器上的short数据转化为网络上的short数据)端口号
server_addr.sin_addr.s_addr=inet_addr("192.168.0.1"); // 绑定的固定IP地址,这个地方可以修改地址
/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
exit(1);
}
/*向服务器发送数据*/
write(sockfd,buffer_write,strlen(buffer_write));
/* 结束通讯 */
close(sockfd);
printf("The parameter passed from main function is %s \n",buffer_write);
sleep(10);
// return (void *)0;
}
int tcp_client(char *recv,char *send)
{
char *tcp_client_send=send,*tcp_client_recv;
//tcp_client_send=(char *)malloc(1024);
tcp_client_recv=(char *)malloc(1024);
int err1,err2=0,err3;
pthread_t tcp_send,tcp_recv;
while(1)
{
/*创建线程1 发送*/
err1=pthread_create(&tcp_send, NULL, tcp_write, (void *)tcp_client_send);
/*等待线程1 结束*/
pthread_join(tcp_send,NULL);
/*创建线程2 接收*/
err2=pthread_create(&tcp_recv, NULL, tcp_read,(void *)tcp_client_recv);
}
if(err1!=0)
{
printf("pthread is not created.\n");
return -1;
}
sleep(1);
printf("pthread is created... \n");
}
void main(void)
{
char *str1="hello world";
char *str2;
str2=(char *)malloc(1024);
while(1)
{
tcp_client(str2,str1);
printf("main server recv from client %s \n",str2);
}
}
- linux多线程socket客户端
- Java Socket多线程服务端、客户端
- Java Socket多线程服务端、客户端
- linux多线程下载客户端
- linux 多线程socket
- linux多线程socket服务器
- 使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
- 使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
- 使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
- 使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
- 使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
- linux下用多线程实现socket服务器和客户端的异步通信
- linux socket的多线程编成来实现多个客户端的连接
- 简易socket客户端和多线程服务器实现
- C# socket 多线程多客户端简单实例
- java socket编程,多线程,客户端服务端
- socket客户端服务器通信(多线程)
- socket nio 多线程接收客户端信息
- 串口调试GPRS模块
- 黑马程序员—winform和数据库的学习感悟
- mini2440串口控制GPRS模块程序
- struts2 <s:iterator>奇偶行不同颜色
- LINUX 并发服务器 fork
- linux多线程socket客户端
- kilu.de德国免费空间中文乱码解决方法
- Java类7大基本设计潜规则 ——潜规则在于你可以不遵守,但一定要付出代价
- Android 4.0 开机启动后接受不到android.permission.RECEIVE_BOOT_COMPLETED 广播
- jdk与jre的区别
- 用cocos2d-x做一个简单的windows phone 7游戏:更猛的怪兽和更多的关卡(三)
- ORA-22285: 对不存在的目录或文件进行 FILEOPEN 操作 ORA-06512: 在 "SYS.DBMS_LOB", line 523 ORA-06512: 在 line 6 查看错误堆
- c语言夜未眠2——实现撤销和重做
- 使用 Windows Server AppFabric 缓存编写 ASP.NET 应用程序